Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

藏色散人
藏色散人asal
2023-02-07 09:58:293800semak imbas

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.

Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

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:

Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

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=&#39;".$str1."&#39;"."&emsp;编码:".$encode1."</br>";
echo "str2=&#39;".$str2."&#39;"."&emsp;编码:".$encode2."</br>";
?>
Tetapi hasil keluaran adalah sama Ia adalah UTF-8

Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

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=&#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>";
?>
Hasil output adalah seperti berikut:

Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten

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(&#39;/[\x{4e00}-\x{9fff}]+/u&#39;, $str1, $matches);
$str1 = join(&#39;&#39;, $matches[0]);
Kod akhir adalah seperti berikut

Hasil 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=&#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 "不等"; 
  } 
} 

?>


Apa yang perlu dilakukan jika panjang rentetan php tidak konsisten


Nota:

akan menjadi 21 bait Salin str1 ke kotak input sql phpmyadmin, dan ia akan dipaparkan seperti berikut:

Apa yang perlu dilakukan jika panjang rentetan php tidak konsistenNah, itu hanya dua watak tambahan

Pembelajaran yang disyorkan: "

Tutorial video PHP

Atas 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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn