>  기사  >  백엔드 개발  >  PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

藏色散人
藏色散人원래의
2023-02-07 09:58:293868검색

일관되지 않은 PHP 문자열 길이에 대한 해결 방법: 1. mb_Detect_encoding() 함수를 통해 문자열의 인코딩 방법을 확인합니다. 2. mb_strlen 함수를 통해 특정 문자 길이를 확인합니다. 3. 정규식 "preg_match_all('/[x)을 사용합니다. {4e00 }-x{9fff}]+/u', $str1, $matches);" 중국어가 아닌 문자만 제거하세요.

PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

이 튜토리얼의 운영 환경: Windows 10 시스템, PHP 버전 8.1, DELL G3 컴퓨터

php 문자열 길이가 일치하지 않으면 어떻게 해야 합니까?

php에서 문자열은 같지만 길이가 다른 문제

문제:

PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

그림에 표시된 것처럼 두 개의 동일한 중국어 문자열을 볼 수 있습니다. 에 한눈에 "물류지원부"인데 길이가 하나는 21이고 다른 하나는 15이다.

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

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

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

PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

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

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

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

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

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

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

?>

실행 결과
PHP 문자열 길이가 일치하지 않는 경우 수행할 작업


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

PHP 문자열 길이가 일치하지 않는 경우 수행할 작업

글쎄, 단지 두 개의 추가 문자일 뿐입니다

추천 학습: 《PHP Video Tutorial

위 내용은 PHP 문자열 길이가 일치하지 않는 경우 수행할 작업의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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