Lors du traitement des chaînes en PHP, si des caractères multi-octets tels que le chinois, le japonais et le coréen sont impliqués, l'utilisation de fonctions de chaîne conventionnelles (telles que substr ) est sujette à des erreurs de troncature de caractère, entraînant des caractères brouillés ou incomplètes. Pour éviter ce problème, PHP fournit une extension de chaîne multi-octe MBSTRING , deux fonctions très pratiques sont MB_GET_INFO et MB_SUBSTR .
Cet article utilisera des exemples pour expliquer comment combiner ces deux fonctions pour intercepter et correctement les cordes multi-octets en toute sécurité et correctement.
MB_GET_INFO () est utilisé pour obtenir les informations de configuration de l'environnement multi -yte actuelles. À travers elle, nous pouvons savoir ce qu'est le codage interne actuellement utilisé, garantissant ainsi que le codage est cohérent lors de l'exécution des opérations de chaîne.
<?php
$info = mb_get_info();
echo "Le codage multilinte actuellement utilisé est:" . $info['internal_encoding'];
?>
Généralement, il est recommandé de définir explicitement l'encodage au début du script pour éviter les problèmes causés par les paramètres par défaut:
<?php
mb_internal_encoding('UTF-8'); // Se présenter comme UTF-8
?>
MB_substr () est une version multi-octet de substr () , utilisée pour intercepter les sous-chaînes d'une longueur spécifiée à partir d'une chaîne, prend en charge plusieurs codages de caractères et évite que les caractères soient incorrectement uniques.
La syntaxe est la suivante:
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string
Explication des paramètres:
$ String : chaîne d'origine
$ start : position de démarrage (commencez par 0)
$ Longueur : Longueur facultative et interceptée
$ Encodage : facultatif, spécifiez le codage (il est recommandé de l'écrire clairement)
Supposons que nous ayons coupé les 50 premiers caractères d'un article chinois codé par l'UTF-8 en résumé:
<?php
mb_internal_encoding('UTF-8'); // Identifier le codage
$article = "PHP Il s'agit d'une langue de script multi-usage open source largement utilisée,Particulièrement adapté à Web Développé et intégré HTML milieu。";
// Avant d'intercepter 50 Personnages
$summary = mb_substr($article, 0, 50);
echo "Résumé de l'article:" . $summary;
?>
Les résultats de sortie ne seront pas brouillés, car MB_SUBSTR sera traité en caractères, pas en octets.
Par exemple, lorsqu'un utilisateur soumet un commentaire, nous voulons afficher uniquement les 30 premiers caractères de la liste d'affichage et fournir le lien "lire le texte intégral":
<?php
mb_internal_encoding('UTF-8');
$comment = "Ceci est un commentaire très excitant soumis par l'utilisateur,Nous voulons que seulement une partie du contenu soit affichée。";
$preview = mb_substr($comment, 0, 30);
echo $preview . '... <a href="https://gitbox.net/full-comment.php?id=123">Lire le texte intégral</a>';
?>
Cela empêche non seulement la page de se faire gonfler en raison d'un contenu excessivement long, mais assure également l'affichage complet des caractères.
Si vous traitez avec d'autres encodages tels que GBK, BIG5, etc., n'oubliez pas de spécifier les paramètres de codage explicitement dans chaque fonction MB_ .
MB_strlen () peut également être utilisé conjointement pour déterminer s'il est nécessaire avant d'intercepter (par exemple, s'il n'y a que 20 caractères, il n'est pas nécessaire d'intercepter 30).
Lors de la sortie du contenu intercepté dans un environnement HTML, vous devez également prêter attention à s'échapper pour éviter les problèmes XSS.