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

藏色散人
藏色散人original
2020-07-18 09:06:242955parcourir

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>";?>
<.> 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>";?>

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);

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]);

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 "不等"; 
  } 
} 

?>

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!

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