>  기사  >  백엔드 개발  >  동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

藏色散人
藏色散人원래의
2020-07-18 09:06:242870검색

PHP 문자열의 길이가 다른 문제를 해결하는 방법: 먼저 "mb_Detect_encoding()" 함수를 통해 두 문자열의 인코딩 방법을 확인한 다음 특정 문자 길이를 확인하고 마지막으로 중국어가 아닌 문자를 제거합니다.

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

질문:

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

사진에서 보면 얼핏 보면 "물류지원부서"라는 똑같은 중국어 문자열이 2개 있는데 하나는 길이가 21이고 다른 하나는 15입니다.

우선 인코딩 방법이 다르기 때문에 발생한다고 직관적으로 생각하실 수도 있습니다.
두 문자열의 인코딩 방법을 mb_detect_encoding()함수를 통해 보면 다음과 같습니다

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

하지만 출력 결과는 모두 UTF-8입니다.

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

이유는 무엇입니까? 출력에서 ​​구체적인 문자 길이를 살펴보겠습니다

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

출력 결과는 다음과 같습니다.

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

문자열 str1에 한자가 7개 포함되어 있는 것으로 확인되었지만 실제로는 "물류지원부서" 5개만 표시됩니다

차단하여 str1의 마지막 두 글자를 봅니다.

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

는 에코로 표시할 수 없지만 두 글자를 차지합니다.

똑같이 보이는 문자열이 다음과 같은 경우 실제로 동일해야 하기 때문에 처리해야 하는 것은 중국어가 아닌 문자를 제거하는 것입니다:

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

마지막으로 코드는 다음과 같습니다

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

?>

실행 결과
동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.


참고:
21- phpmyadmin의 SQL 입력 상자에 str1 바이트를 입력하면 다음과 같이 표시됩니다

동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.

글쎄, 두 글자만 추가되었을 뿐입니다

더 보기 관련 지식은 PHP 중국어 웹사이트를 방문하세요!

위 내용은 동일한 PHP 문자열이지만 길이가 다른 문제를 해결하세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.