Maison > développement back-end > Problème PHP > Résoudre le problème des mêmes chaînes php mais de longueurs différentes

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

藏色散人
Libérer: 2023-03-02 16:52:02
original
2885 Les gens l'ont consulté

Méthodes pour résoudre la longueur inégale des chaînes PHP : vérifiez d'abord la méthode d'encodage des deux chaînes via la fonction "mb_detect_encoding()" puis vérifiez la longueur de caractère spécifique et enfin supprimez les caractères non chinois ;

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

Question :

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

Comme le montre l'image, il y en a deux en un coup d'œil La même chaîne chinoise "Logistics Support Department", mais l'une a une longueur de 21 et l'autre une longueur de 15.

Tout d'abord, vous pouvez intuitivement penser que cela est dû à différentes méthodes d'encodage
Affichez la méthode d'encodage de deux chaînes via la fonction mb_detect_encoding() Le code est le suivant

<?phpheader("Content-Type: text/html;charset=utf-8"); 

$data[0]=$str1="后勤保障部‍";$data[1]=$str2="后勤保障部";
var_dump($data);//查看编码方式$encode1 = mb_detect_encoding($str1,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));$encode2 = mb_detect_encoding($str2,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));echo "str1=&#39;".$str1."&#39;"."&emsp;编码:".$encode1."</br>";echo "str2=&#39;".$str2."&#39;"."&emsp;编码:".$encode2."</br>";?>
Copier après la connexion
<. 🎜> mais les résultats de sortie sont tous UTF -8

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

Alors, quelle est la raison ? Vérifions la longueur de caractère spécifique dans la sortie

<?phpheader("Content-Type: text/html;charset=utf-8"); 

$data[0]=$str1="后勤保障部‍";$data[1]=$str2="后勤保障部";
var_dump($data);//查看编码方式$encode1 = mb_detect_encoding($str1,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));$encode2 = mb_detect_encoding($str2,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));//当mb_strlen的内码选择为UTF-8的时候,则会将中文字符当成一个字符//strlen,得到的是字符串所占的字节数echo "str1=&#39;".$str1."&#39;".":&emsp;字符长度:".mb_strlen($str1).":&emsp;字节长度:".strlen($str1)."&emsp;编码:".$encode1."</br>";echo "str2=&#39;".$str2."&#39;".":&emsp;字符长度:".mb_strlen($str2).":&emsp;字节长度:".strlen($str2)."&emsp;编码:".$encode2."</br>";?>
Copier après la connexion

La sortie le résultat est le suivant :

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

On constate que la chaîne str1 comporte 7 caractères chinois, mais seulement 5 sont réellement affichés, qui est le "Département de support logistique"

Afficher en interceptant les deux derniers caractères de str1

//截取str1后面两个未显示字符$res=mb_substr($str1, 5,2);echo "最后两字符:".$res."</br>";echo mb_strlen($res);
Copier après la connexion

Ne peut pas être affiché par écho, mais il occupe deux caractères

Si les chaînes qui se ressemblent doivent en fait être égales , ils doivent être traités. Le traitement consiste à éliminer les caractères non chinois :

//剔除str1字串中未显示的字符(非中文字符)preg_match_all(&#39;/[\x{4e00}-\x{9fff}]+/u&#39;, $str1, $matches);$str1 = join(&#39;&#39;, $matches[0]);
Copier après la connexion

Le code final est le suivant

<?phpheader("Content-Type: text/html;charset=utf-8"); 

$data[0]=$str1="后勤保障部‍";$data[1]=$str2="后勤保障部";
var_dump($data);//查看编码方式$encode1 = mb_detect_encoding($str1,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));$encode2 = mb_detect_encoding($str2,  array("ASCII","UTF-8","GB2312","GBK","BIG5"));//当mb_strlen的内码选择为UTF-8的时候,则会将中文字符当成一个字符//strlen,得到的是字符串所占的字节数echo "str1=&#39;".$str1."&#39;".":&emsp;字符长度:".mb_strlen($str1).":&emsp;字节长度:".strlen($str1)."&emsp;编码:".$encode1."</br>";echo "str2=&#39;".$str2."&#39;".":&emsp;字符长度:".mb_strlen($str2).":&emsp;字节长度:".strlen($str2)."&emsp;编码:".$encode2."</br>";//截取str1后面两个未显示字符echo "</br>------------------截取str1后面两个未显示字符---------------------</br>";$res=mb_substr($str1, 5,2);echo "str1最后两字符:&emsp;".$res."</br>";echo "str1长度:&emsp;".mb_strlen($res)."</br>";//比较echo "</br>--------------------------相等比较----------------------------------</br>";echo "str1 与 str2比较:&emsp;";echo strcomp($str1,$str2)."</br>";echo "str2 与 str2比较:&emsp;";echo strcomp($str2,$str2)."</br>";//剔除str1字串中非中文preg_match_all(&#39;/[\x{4e00}-\x{9fff}]+/u&#39;, $str1, $matches);$str1 = join(&#39;&#39;, $matches[0]);echo "</br>---------------------剔除str1字串中非中文后----------------------</br>";echo "str1=&#39;".$str1."&#39;".":&emsp;字符长度:".mb_strlen($str1).":&emsp;字节长度:".strlen($str1)."&emsp;编码:".$encode1."</br>";echo "str1 与 str2比较:&emsp;";echo strcomp($str1,$str2)."</br>";function strcomp($str1,$str2){ 
  if($str1 == $str2){ 
    return "相等"; 
  }else{ 
    return "不等"; 
  } 
} 

?>
Copier après la connexion
Résultats d'exécution


Résoudre le problème des mêmes chaînes php mais de longueurs différentes


Remarque : Copiez le str1 de 21 octets dans la zone de saisie SQL de phpmyadmin, l'affichage est le suivant

Résoudre le problème des mêmes chaînes php mais de longueurs différentes

Eh bien , ce ne sont que les deux caractères supplémentaires

Pour plus de connaissances connexes, veuillez visiter le

Site Web PHP chinois !

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!

Étiquettes associées:
php
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