Rumah >pembangunan bahagian belakang >masalah PHP >Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten
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>"; ?>Tetapi hasil keluaran adalah sama Ia adalah UTF-8 Jadi apakah sebabnya Mari kita lihat panjang aksara tertentu dalam output
<?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>"; ?>Hasil output adalah seperti berikut: Didapati bahawa rentetan str1 mempunyai 7 aksara Cina, tetapi hanya 5 yang sebenarnya dipaparkan, iaitu "Jabatan Sokongan Logistik" Semak dengan memintas dua aksara terakhir str1
//截取str1后面两个未显示字符 $res=mb_substr($str1, 5,2); echo "最后两字符:".$res."</br>"; echo mb_strlen($res);Tidak boleh dipaparkan dengan gema, tetapi ia menduduki dua aksara Jika rentetan yang kelihatan sama sebenarnya dikehendaki sama, ia perlu diproses untuk menghapuskan aksara bukan Cina:
//剔除str1字串中未显示的字符(非中文字符) preg_match_all('/[\x{4e00}-\x{9fff}]+/u', $str1, $matches); $str1 = join('', $matches[0]);Kod akhir adalah seperti berikutHasil berjalan
<?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!