Position actuelle: Accueil> Derniers articles> Conseils MB_Strcut pour éviter les erreurs de codage pendant l'interception

Conseils MB_Strcut pour éviter les erreurs de codage pendant l'interception

gitbox 2025-05-26

Lors du traitement des chaînes de mulabyte en PHP, la fonction couramment utilisée est MB_Strcut , qui peut intercepter les chaînes en fonction du nombre d'octets et convient au traitement du texte codé de plusieurs gobets tels que UTF-8. Cependant, de nombreux développeurs rencontrent souvent des erreurs de codage lors de l'utilisation de MB_Strcut pour intercepter les chaînes, ce qui entraîne des résultats d'interception ou de tronçant un demi-caractère. Cet article expliquera en détail comment utiliser correctement MB_strcut pour éviter les erreurs de codage et partager des conseils pratiques.


Qu'est-ce que MB_strcut?

MB_strcut est l'une des fonctions de chaîne multipyte de PHP pour intercepter les chaînes par longueur d'octets. Contrairement à MB_substr , MB_Strcut est intercepté en fonction des octets, pas des caractères. Il peut contrôler plus précisément la longueur d'interception lorsqu'il s'agit de codage multi-octets, évitant les personnages brouillés tronqués.

Prototype de fonction:

 mb_strcut(string $str, int $start, ?int $length = null, ?string $encoding = null): string
  • $ str : entrez une chaîne.

  • $ start : position de démarrage, calculé par nombre d'octets.

  • $ Longueur : le nombre d'octets interceptés (facultatif).

  • $ Encodage : codage de chaîne, le codage interne est utilisé par défaut.


Pourquoi est-ce que je reçois des erreurs d'encodage?

Lorsque nous utilisons MB_Strcut pour intercepter la chaîne, si $ start ou $ longueur tombe de manière inappropriée au milieu du caractère multi-octets, le code brouillé apparaîtra car les octets de caractère tronquées sont incomplets. Surtout pour le codage UTF-8, un caractère chinois est généralement composé de 3 octets. Lors de l'interception des octets, il est nécessaire de s'assurer que le point de départ et le point final sont tous deux limites de caractère.


Conseils pratiques pour éviter les erreurs de codage

1. Réglez clairement l'encodage

Lors de l'appel MB_Strcut , spécifier explicitement le codage de la chaîne est la première étape pour éviter les problèmes causés par le codage par défaut incohérent.

 $encoding = 'UTF-8';
$result = mb_strcut($str, $start, $length, $encoding);

2. Utilisez MB_strlen et MB_Substr pour détecter les limites

Avant d'intercepter, utilisez MB_STRLEN pour obtenir la longueur de caractères de la chaîne pour éviter $ démarrer et $ la longueur à partir de la gamme. Dans le même temps, combinez MB_SUBSTR pour vous assurer que la moitié d'un personnage n'est pas tronqué.

 $length = 10;
if (mb_strlen($str, $encoding) > $length) {
    $result = mb_substr($str, 0, $length, $encoding);
} else {
    $result = $str;
}

3. Combiner MB_Strcut et MB_Strlen pour traiter les octets et la conversion des caractères

Si vous devez intercepter par le nombre d'octets, calculez d'abord le nombre complet de caractères correspondant à la plage d'octet interceptée, puis utilisez MB_SUBSTR pour intercepter.

 function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
    $substr = mb_strcut($str, $start, $length, $encoding);
    // mb_strcut Parfois, un demi-personnage peut être tronqué,Le transcodage confirme s'il est valable
    if (mb_check_encoding($substr, $encoding)) {
        return $substr;
    }
    // Si incomplet,Réduire la longueur,Jusqu'à terminer
    while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
        $length--;
        $substr = mb_strcut($str, $start, $length, $encoding);
    }
    return $substr;
}

4. Exemple: Gestion de l'interception de la chaîne multi-utf-8

 $str = "Ceci est une chaîne de test,Comprend chinois etEnglish";
$start = 0;
$length = 15;  // Intercepter par octets

$result = safe_mb_strcut($str, $start, $length, 'UTF-8');
echo $result;

Cela évite le problème brouillé causé par la troncature des octets.


résumé

  • MB_strcut intercepte les chaînes multi-octets par octets. Faites attention aux limites du caractère pour éviter de tronquer le demi-personnage.

  • Identifiez les paramètres d'encodage pour garantir que le comportement de la fonction est cohérent.

  • L'intégrité de l'encodage des résultats interceptés peut être vérifiée en combinaison avec MB_CHECK_ENCODING .

  • La combinaison de MB_Strlen et MB_Substr est plus sécurisée lorsque l'interception du caractère est nécessaire.

Grâce aux techniques ci-dessus, les erreurs de codage pendant l'interception de chaîne multi-octets en PHP peuvent être évitées efficacement, et la précision du traitement de texte et de l'expérience utilisateur peut être assurée.


 <?php
function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
    $substr = mb_strcut($str, $start, $length, $encoding);
    if (mb_check_encoding($substr, $encoding)) {
        return $substr;
    }
    while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
        $length--;
        $substr = mb_strcut($str, $start, $length, $encoding);
    }
    return $substr;
}

$str = "Ceci est une chaîne de test,Comprend chinois etEnglish";
$start = 0;
$length = 15;

echo safe_mb_strcut($str, $start, $length, 'UTF-8');
?>

Si vous souhaitez en savoir plus sur le traitement des chaînes PHP, vous pouvez accéder aux ressources suivantes:

 $url = "https://gitbox.net/php/manual/zh/function.mb-strcut.php";