Maison > développement back-end > Problème PHP > Que faire si les longueurs de chaînes php sont incohérentes

Que faire si les longueurs de chaînes php sont incohérentes

藏色散人
Libérer: 2023-03-17 21:42:02
original
3920 Les gens l'ont consulté

Solutions aux longueurs de chaîne PHP incohérentes : 1. Vérifiez la méthode d'encodage de la chaîne via la fonction mb_detect_encoding() ; 2. Vérifiez la longueur de caractère spécifique via la fonction mb_strlen 3. Utilisez l'expression régulière "preg_match_all('/[x ; {4e00 }-x{9fff}]+/u', $str1, $matches);" Supprimez simplement les caractères non chinois.

Que faire si les longueurs de chaînes php sont incohérentes

L'environnement d'exploitation de ce tutoriel : système Windows 10, PHP version 8.1, ordinateur DELL G3

php Que dois-je faire si les longueurs de chaîne sont incohérentes ?

Le problème des mêmes chaînes mais de longueurs différentes en php

Problème :

Que faire si les longueurs de chaînes php sont incohérentes

Comme le montre l'image, deux chaînes chinoises identiques peuvent être vues à un coup d'oeil" Département de soutien logistique", mais la longueur de l'un est de 21 et l'autre de 15.

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

<?php
header("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.

Que faire si les longueurs de chaînes php sont incohérentes

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

<?php
header("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

Les résultats de sortie sont les suivants :

Que faire si les longueurs de chaînes php sont incohérentes

Il s'avère que la chaîne str1 a 7 caractères chinois, mais seulement 5 sont réellement affichés, qui est le "Département de Support Logistique"

Par interception Visualisez 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 sont en fait doivent être égaux, 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

Enfin, le code est le suivant

<?php
header("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

Le résultat en cours
Que faire si les longueurs de chaînes php sont incohérentes


Remarque :
Copiez le 21-. octet str1 dans la zone de saisie SQL de phpmyadmin, il s'affiche comme suit

Que faire si les longueurs de chaînes php sont incohérentes

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

Recommandé d'apprendre :《Tutoriel vidéo PHP

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:
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