: Après avoir utilisé MB_strcut pour intercepter la chaîne, le code brouillé apparaît ou les caractères à la fin de la chaîne interceptée sont incomplètes.
Raison : MB_strcut est d'intercepter les chaînes par octets, pas par le caractère. Si la position interceptée tombe exactement au milieu d'un caractère multi-gytet, le caractère se brisera et affichera ainsi le code brouillé.
<?php
$str = "Bonjour,monde";
echo mb_strcut($str, 0, 5, "UTF-8");
// La sortie peut être brouillée,parce que“toi”Oui3octet,“bien”Oui3octet,Intercepter5octet会截断“bien”Personnage
?>
Phénomène d'erreur : le résultat d'interception est incorrect ou la sortie est anormale.
Cause : Si le codage correct n'est pas explicitement spécifié, MB_Strcut utilise le codage par défaut interne (généralement la valeur de MB_internal_encoding () ), qui peut ne pas correspondre au codage réel de la chaîne, résultant en une erreur d'interception.
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 4); // Aucun encodage spécifié,默认可能不Oui UTF-8,Le résultat est anormal
?>
Phénomène d'erreur : erreur de fonction ou anomalie du comportement.
Cause : les deux premiers paramètres de MB_Strcut (chaîne, position de début) et le troisième paramètre (longueur d'interception) doivent être des entiers ou des valeurs qui peuvent être converties en entiers, et la position de début et la longueur ne peuvent pas être négatives (la longueur peut être omise). Le passage dans des valeurs non intégrales ou négatives entraînera une erreur.
<?php
$str = "Hello World";
echo mb_strcut($str, "a", 5); // La position de départ devrait être un entier,传入Personnage符串会出错
?>
Étant donné que MB_Strcut est intercepté par des octets, assurez-vous que la longueur d'interception ne fait pas tronquer les caractères multi -yte. La méthode courante consiste à calculer d'abord la longueur de caractères multi-octets, puis à intercepter la longueur d'octets correspondante au besoin, ou à utiliser MB_SUBSTR pour intercepter à la place.
<?php
$str = "Bonjour,monde";
// utiliser mb_substr 按Personnage符Intercepter,避免截断Personnage符
echo mb_substr($str, 0, 2, "UTF-8"); // Sortir:Bonjour
?>
Si vous devez utiliser MB_strcut , assurez-vous que le nombre d'octets interceptés est la limite du caractère complet:
<?php
$str = "Bonjour,monde";
$length = 6; // 3octet * 2个Personnage符
echo mb_strcut($str, 0, $length, "UTF-8"); // Sortir:Bonjour
?>
Pour éviter les problèmes causés par défaut de codage par défaut, les paramètres de codage des caractères doivent toujours être spécifiés lors de l'appel MB_Strcut , généralement "UTF-8" .
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 6, "UTF-8");
?>
Avant d'utiliser MB_Strcut , assurez-vous que la position de départ et les paramètres de longueur entrants sont des entiers non négatifs. Vous pouvez taper la conversion et la vérification via des fonctions telles que intVal () ou filter_var () pour éviter les erreurs.
<?php
$start = intval($_GET['start'] ?? 0);
$length = intval($_GET['length'] ?? 10);
$str = "Hello, monde";
echo mb_strcut($str, $start, $length, "UTF-8");
?>
<?php
function safe_mb_strcut(string $string, int $start, int $length = null, string $encoding = 'UTF-8'): string {
// Assurez-vous que la position de départ et la longueur sont des entiers non négatifs
$start = max(0, $start);
if ($length !== null) {
$length = max(0, $length);
}
// 获取Personnage符串octet长度
$byteLength = strlen(mb_convert_encoding($string, 'UTF-8'));
if ($start > $byteLength) {
return '';
}
if ($length === null) {
$length = $byteLength - $start;
} else if ($start + $length > $byteLength) {
$length = $byteLength - $start;
}
return mb_strcut($string, $start, $length, $encoding);
}
// utiliser示例
$str = "Bonjour,GitBoxutilisateur!";
echo safe_mb_strcut($str, 0, 9, "UTF-8"); // Intercepter前3个汉Personnage
?>
Grâce à l'analyse et aux exemples ci-dessus, la clé de l'utilisation correcte de MB_strcut est:
Spécifiez explicitement l'encodage des caractères;
Assurez-vous que le type de paramètre est correct et valide;
Notez que les octets ne sont pas tronqués par des caractères multi-octets ou utilisent MB_substr au lieu d'intercepter par caractère.
Après avoir maîtrisé ces techniques, MB_Strcut sera plus fiable lors du traitement des chaînes multi-gobets, en évitant les erreurs courantes.