Position actuelle: Accueil> Derniers articles> Comment éviter les problèmes de code brouillé lors de l'interception de MB_strcut

Comment éviter les problèmes de code brouillé lors de l'interception de MB_strcut

gitbox 2025-05-27

1. Pourquoi MB_Strcut semble-t-il brouillé?

MB_strcut () est différent de MB_SUBSTR () . Il est intercepté en unités, pas en personnages. Pour les cordes codées UTF-8, un caractère chinois prend généralement 3 octets. Si vous tronquez la chaîne à partir d'une position d'octet au milieu, elle peut provoquer des caractères incomplets, affichant ainsi des caractères brouillés ou illégaux à la sortie.

Par exemple:

 $str = 'Bonjour,monde';
$cut = mb_strcut($str, 0, 4, 'UTF-8');
echo $cut;

Le résultat de cette sortie de code est susceptible d'être brouillé, car le mot «vous» occupe 3 octets dans UTF-8. MB_strcut intercepte les 4 premiers octets, et tronque juste une partie du deuxième caractère "bon" , provoquant un brouillage.


2. Comment éviter le code brouillé?

1. Utilisez MB_substr pour remplacer

Si vous n'avez pas spécifiquement besoin de contrôle au niveau des octets, il est recommandé d'utiliser MB_substr () , qui fonctionne en fonction de la longueur du caractère plutôt que de la longueur d'octets, et est plus adapté à la gestion des chaînes de multicette:

 $str = 'Bonjour,monde';
$cut = mb_substr($str, 0, 2, 'UTF-8');
echo $cut; // Sortir:Bonjour

2. Juger les limites du caractère et les intercepter

Si vous devez utiliser mb_strcut () (par exemple, pour limiter la longueur des octets de stockage), vous devez combiner mb_strlen () et codage de caractères pour un contrôle plus précis. Vous pouvez d'abord utiliser mb_substr () pour obtenir des caractères, puis utiliser strlen () pour déterminer s'il dépasse la plage de longueur d'octets.

 function safe_mb_strcut($string, $start, $length, $encoding = 'UTF-8') {
    $substr = '';
    $i = 0;
    $byteCount = 0;

    while ($i < mb_strlen($string, $encoding)) {
        $char = mb_substr($string, $i, 1, $encoding);
        $charLen = strlen($char);
        if ($byteCount + $charLen > $length) {
            break;
        }
        $substr .= $char;
        $byteCount += $charLen;
        $i++;
    }
    return $substr;
}

$str = 'Bonjour,monde';
$cut = safe_mb_strcut($str, 0, 6); // Le nombre total d&#39;octets est6
echo $cut; // Sortir:Bonjour

3. Configurez le codage interne correct

Lorsque vous utilisez la fonction MB_Series , assurez-vous de définir ou de confirmer que le codage de caractères interne est ce que vous attendez (comme UTF-8). Vous pouvez utiliser les méthodes suivantes pour définir à l'échelle mondiale:

 mb_internal_encoding('UTF-8');

De plus, il peut également être vérifié et débogué de la manière suivante:

 echo mb_detect_encoding($str); // Vérifier l&#39;encodage des chaînes

4. Exemple de scénario pratique: Évitez la troncature de l'URL et le code brouillé

Supposons que vous souhaitiez intercepter une partie du contenu contenant l'URL dans la description, vous pouvez utiliser la méthode ci-dessus pour intercepter en toute sécurité sans détruire l'URL. Par exemple:

 $str = 'Pour plus d&#39;informations, veuillez visiter:https://gitbox.net/docs/php-guide.html';
$cut = safe_mb_strcut($str, 0, 40);
echo $cut;

Vous pouvez vous assurer que la sortie ne détruit pas la structure URL ou ne provoque pas de code brouillé, ce qui convient particulièrement au résumé de la plate-forme sociale, à l'aperçu par e-mail et à d'autres scénarios.