Maison > développement back-end > tutoriel php > PHP résout le problème des caractères chinois tronqués interceptés par substr()

PHP résout le problème des caractères chinois tronqués interceptés par substr()

高洛峰
Libérer: 2023-03-04 14:40:01
original
1568 Les gens l'ont consulté

En php, si je veux utiliser substr() pour intercepter une chaîne entièrement en anglais, ce ne sera pas un problème si elle inclut du chinois ou de l'anglais, ce sera une tragédie, mais ne vous inquiétez pas, nous. peut utiliser d'autres méthodes pour le résoudre.

PHP intercepte les chaînes chinoises avec des caractères tronqués. C'est quelque chose que j'ai découvert récemment. J'ai déjà écrit un article sur la génération automatique de méta-informations. Cet article concernait l'utilisation de PHP pour intercepter les premiers mots d'un message. article comme méthode de description, mais IE6 ne peut pas charger CSS Voici un supplément.

Tout d'abord, nous devons clarifier ce problème. La raison pour laquelle IE6 ne parvient parfois pas à charger CSS est que le fichier est tronqué, ce qui fait que le lien suivant pour charger CSS n'est pas correctement analysé par IE6. . J'ai donc vu une page HTML pure, sans CSS, nue ! Après avoir clarifié le problème, le problème restant peut être facilement résolu, à savoir éviter les caractères tronqués. Puisque la fonction fournie par Wange a des caractères tronqués, j'ai trouvé une nouvelle fonction PHP pour résoudre ce problème de code tronqué.

La fonction substr() peut diviser du texte, mais vous rencontrerez souvent des problèmes si le texte à diviser comprend des caractères chinois.

L'utilisation de la fonction mb_substr() est similaire à celle de substr(), sauf qu'un paramètre supplémentaire est ajouté à la fin pour définir l'encodage de la chaîne.

Vous devriez comprendre la raison pour laquelle j'ai amélioré la méthode de Wange~~

Voici quelques méthodes de traitement plus avancées

Exemple 1

Le Code est le suivant

function func_chgtitle($str,$len) { //$length我们允许字符串显示的最大长度 
 $tmpstr = "";
 $strlen = $len;
 for($i = 0; $i < $strlen; $i++) {
 if(ord(substr($str, $i, 1)) > 0xa0) {
 $tmpstr .= substr($str, $i, 2);
 $i++;
 } else
 $tmpstr .= substr($str, $i, 1);
 }
 return $tmpstr;
}
Copier après la connexion

Exemple 2

La chaîne est codée en UTF-8 et un caractère chinois occupe trois octets:

public static function chinoissubstr($str, $start, $len) { // $str fait référence à la chaîne, $start fait référence à la position de départ de la chaîne, $len fait référence à la longueur de la chaîne

$strlen = $start $len; // Utilisez $strlen pour stocker la longueur totale de la chaîne, c'est-à-dire de la position de départ de la chaîne à la longueur totale de la chaîne

Le code est le suivant

for($i = $start; $i < $strlen;) {
 if (ord ( substr ( $str, $i, 1 ) ) > 0xa0) { // 如果字符串中首个字节的ASCII序数
值大于0xa0,则表示汉字
 $tmpstr .= substr ( $str, $i, 3 ); // 每次取出三位字符赋给变量$tmpstr,即等
于一个汉字
 $i=$i+3; // 变量自加3
 } else{
 $tmpstr .= substr ( $str, $i, 1 ); // 如果不是汉字,则每次取出一位字符赋给
变量$tmpstr
 $i++;
 }
 }
 return $tmpstr; // 返回字符串
 }
Copier après la connexion

J'espère que cet article aidera tout le monde à résoudre le même problème avec la programmation PHP !

Pour plus d'articles sur PHP sur la résolution du problème des caractères chinois tronqués interceptés par substr(), veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal