Home > Backend Development > PHP Problem > Solve the problem of the same php strings but different lengths

Solve the problem of the same php strings but different lengths

藏色散人
Release: 2023-03-02 16:52:02
Original
2947 people have browsed it

Methods to solve the unequal lengths of PHP strings: first check the encoding methods of the two strings through the "mb_detect_encoding()" function; then check the specific character lengths; and finally remove non-Chinese characters.

Solve the problem of the same php strings but different lengths

Question:

Solve the problem of the same php strings but different lengths

As shown in the picture, there are two at first glance The same Chinese string "Logistics Support Department", but one has a length of 21 and the other has a length of 15.

First of all, you may intuitively think that it is caused by different encoding methods.
Use the mb_detect_encoding() function to check the encoding methods of the two strings. The code is as follows

<?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>";?>
Copy after login

But the output results are all UTF-8

Solve the problem of the same php strings but different lengths

So what is the reason? Let’s check the specific character length in the output

<?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>";?>
Copy after login

The output results are as follows:

Solve the problem of the same php strings but different lengths

It was found that the string str1 has 7 Chinese characters, but only 5 are actually displayed, which is the "Logistics Support Department"

By intercepting the last two characters of str1 Character view

//截取str1后面两个未显示字符$res=mb_substr($str1, 5,2);echo "最后两字符:".$res."</br>";echo mb_strlen($res);
Copy after login

cannot be echo displayed, but it does occupy two characters

If the strings that look the same are actually required to be equal, processing needs to be performed. The processing is to eliminate non-Chinese characters:

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

The final code is as follows

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

?>
Copy after login

Running results
Solve the problem of the same php strings but different lengths


Note:
Copy the 21-byte str1 to The sql input box of phpmyadmin displays as follows

Solve the problem of the same php strings but different lengths

Well, it’s just the two extra characters

For more related knowledge, please visit PHP Chinese website!

The above is the detailed content of Solve the problem of the same php strings but different lengths. For more information, please follow other related articles on the PHP Chinese website!

Related labels:
php
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Issues
php data acquisition?
From 1970-01-01 08:00:00
0
0
0
PHP extension intl
From 1970-01-01 08:00:00
0
0
0
How to learn php well
From 1970-01-01 08:00:00
0
0
0
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template