Maison >développement back-end >tutoriel php >Concernant la solution au problème des caractères chinois tronqués interceptés par substr() en php

Concernant la solution au problème des caractères chinois tronqués interceptés par substr() en php

墨辰丷
墨辰丷original
2018-06-01 17:38:361712parcourir

Cet article présente principalement la fonction PHP substr(). Voici un exemple de code pour illustrer le problème tronqué lors de l'interception de chaînes chinoises. Les amis dans le besoin peuvent s'y référer

Si je souhaite l'utiliser en PHP. Il n'y a aucun problème si substr() intercepte une chaîne entièrement en anglais. Si elle inclut du chinois ou de l'anglais, ce sera une tragédie, mais ne vous inquiétez pas, nous pouvons 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.

Après avoir lu ceci, vous devriez comprendre la raison pour laquelle j'ai amélioré la méthode 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;
}

Exemple 2


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


fonction statique publique Chinesesubstr($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 depuis la position de départ de la chaîne jusqu'à 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; // 返回字符串
 }

Résumé : Ce qui précède est l'intégralité du contenu de cet article, j'espère qu'il sera utile pour l'étude de tout le monde.

Recommandations associées :

php Visitez l'explication graphique de la procédure stockée Oracle

php Implémente la méthode d'obtention de l'adresse URL actuelle

PHP implémente la méthode de réception du flux binaire et de sa conversion en image

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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