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.
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
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'octets est6
echo $cut; // Sortir:Bonjour
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'encodage des chaînes
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'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.