Penyelesaian kepada panjang rentetan PHP yang tidak konsisten: 1. Semak kaedah pengekodan rentetan melalui fungsi mb_detect_encoding() 2. Semak panjang aksara tertentu melalui fungsi mb_strlen 3. Gunakan ungkapan biasa "preg_match_all(; '/ [x{4e00}-x{9fff}]+/u', $str1, $matches);" Alih keluar sahaja aksara bukan Cina.
Persekitaran pengendalian tutorial ini: sistem Windows 10, PHP versi 8.1, komputer DELL G3
Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten?
Masalah dengan rentetan yang sama tetapi panjang yang berbeza dalam php
Masalah:
Seperti yang ditunjukkan dalam gambar, pada pandangan pertama terdapat dua rentetan aksara Cina yang serupa "Jabatan Sokongan Logistik", tetapi Satu mempunyai panjang 21 dan satu mempunyai panjang 15.
Pertama sekali, anda mungkin secara intuitif berfikir bahawa ia disebabkan oleh kaedah pengekodan yang berbeza
Gunakan fungsi mb_detect_encoding()
untuk menyemak kaedah pengekodan dua rentetan tersebut
<?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='".$str1."'"." 编码:".$encode1."</br>"; echo "str2='".$str2."'"." 编码:".$encode2."</br>"; ?>
<?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='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."</br>"; echo "str2='".$str2."'".": 字符长度:".mb_strlen($str2).": 字节长度:".strlen($str2)." 编码:".$encode2."</br>"; ?>
//截取str1后面两个未显示字符 $res=mb_substr($str1, 5,2); echo "最后两字符:".$res."</br>"; echo mb_strlen($res);
//剔除str1字串中未显示的字符(非中文字符) preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches); $str1 = join('', $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='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."</br>"; echo "str2='".$str2."'".": 字符长度:".mb_strlen($str2).": 字节长度:".strlen($str2)." 编码:".$encode2."</br>"; //截取str1后面两个未显示字符 echo "</br>------------------截取str1后面两个未显示字符---------------------</br>"; $res=mb_substr($str1, 5,2); echo "str1最后两字符: ".$res."</br>"; echo "str1长度: ".mb_strlen($res)."</br>"; //比较 echo "</br>--------------------------相等比较----------------------------------</br>"; echo "str1 与 str2比较: "; echo strcomp($str1,$str2)."</br>"; echo "str2 与 str2比较: "; echo strcomp($str2,$str2)."</br>"; //剔除str1字串中非中文 preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches); $str1 = join('', $matches[0]); echo "</br>---------------------剔除str1字串中非中文后----------------------</br>"; echo "str1='".$str1."'".": 字符长度:".mb_strlen($str1).": 字节长度:".strlen($str1)." 编码:".$encode1."</br>"; echo "str1 与 str2比较: "; echo strcomp($str1,$str2)."</br>"; function strcomp($str1,$str2){ if($str1 == $str2){ return "相等"; }else{ return "不等"; } } ?>
akan menjadi 21 bait Salin str1 ke kotak input sql phpmyadmin, dan ia akan dipaparkan seperti berikut:
Nah, itu hanya dua watak tambahan
Pembelajaran yang disyorkan: "
Tutorial video PHPAtas ialah kandungan terperinci Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!