Prosedur 1: Metode PHP untuk mencegat string berbahasa Mandarin.
Karena karakter kacau (menggunakan substr) sering muncul saat mencegat string berbahasa Mandarin di beranda situs web dan vTigerCRM, hari ini saya menemukan metode yang lebih baik untuk mencegat string berbahasa Mandarin dan ingin membaginya dengan Anda .
fungsi msubstr($str, $mulai, $len) {
$tmpstr = "";
$strlen = $mulai + $len;
untuk($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} kalau tidak
$tmpstr .= substr($str, $i, 1);
}
kembalikan $tmpstr;
}
Program 2: PHP memotong string UTF-8 dan menyelesaikan masalah setengah karakter
/******************************** *************************************
* PHP mencegat string UTF-8 untuk menyelesaikan masalah setengah karakter.
* Bahasa Inggris dan angka (lebar setengah) adalah 1 byte (8 bit), bahasa Mandarin (lebar penuh) adalah 3 byte
* @return String yang dikeluarkan, ketika $len kurang dari atau sama dengan 0, seluruh string akan dikembalikan
* @param $str string sumber
* $len adalah panjang substring di sebelah kiri
******************************************************* * ******************/
fungsi utf_substr($str,$len)
{
untuk($i=0;$i<$len;$i++)
{
$temp_str=substr($str,0,1);
jika(ord($temp_str) > 127)
{
$i++;
jika($i<$len)
{
$new_str[]=substr($str,0,3);
$str=substr($str,3);
}
}
kalau tidak
{
$new_str[]=substr($str,0,1);
$str=substr($str,1);
}
}
kembali bergabung($new_str);
}
?>
intersepsi string php utf-8
<?
fungsi cutstr($string, $panjang) {
preg_match_all("/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]|[xe1-xef ][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80 -xbf][x80-xbf][x80-xbf]/", $string, $info);
untuk($i=0; $i<hitungan($info[0]); $i++) {
$potongan kata .= $info[0][$i];
$j = ord($info[0][$i]) > 127 $j + 2 : $j + 1;
if ($j > $panjang - 3) {
kembalikan $wordscut."...";
}
}
kembali bergabung('', $info[0]);
}
$string="242432 Oposisi 456 dilakukan pada kedutaan besar lokal 7890";
untuk($i=0;$i<strlen($string);$i++)
{
echo cutstr($string,$i).."<br>";
}
?>
Fungsi intersepsi string UTF-8
Untuk mendukung berbagai bahasa, string dalam database dapat disimpan sebagai pengkodean UTF-8. Dalam pengembangan situs web, Anda mungkin perlu menggunakan PHP untuk mencegat sebagian string. Untuk menghindari karakter yang kacau, tulis fungsi intersepsi string UTF-8 berikut.
Untuk prinsip UTF-8, silakan lihat FAQ UTF-8.
Karakter yang dikodekan UTF-8 dapat terdiri dari 1~3 byte ditentukan oleh yang pertama dinilai dengan byte. (Secara teoritis bisa lebih lama, tapi disini kita asumsikan tidak lebih dari 3 byte)
Jika byte pertama lebih besar dari 224, byte tersebut dan 2 byte setelahnya membentuk karakter UTF-8. Jika byte pertama lebih besar dari 192 dan kurang dari 224, byte tersebut dan 1 byte setelahnya membentuk karakter UTF-8. Karakter Jika tidak, byte pertama itu sendiri adalah karakter bahasa Inggris (termasuk angka dan sedikit tanda baca).
Kode yang sebelumnya dirancang untuk situs web (juga fungsi intersepsi panjang yang saat ini digunakan di beranda)
Kode:
<?php // Potong_Str;
//$sourcestr adalah string yang akan diproses
//$cutlength adalah panjang intersepsi (yaitu jumlah kata)
fungsi cut_str($sourcestr,$panjang potong)
{
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//Jumlah byte dalam string
while (($n<$cutlength) dan ($i<=$str_length))
{
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str);//Dapatkan kode ascii dari karakter ke-$i dalam string
if ($ascnum>=224) //Jika bit ASCII tinggi dan 224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //Menurut spesifikasi pengkodean UTF-8, 3 karakter berturut-turut dihitung sebagai satu karakter
$i=$i+3; //Byte sebenarnya dihitung sebagai 3
$n++; //Panjang string dihitung sebagai 1
}
elseif ($ascnum>=192) //Jika bit ASCII tinggi dan 192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //Menurut spesifikasi pengkodean UTF-8, 2 karakter berturut-turut dihitung sebagai satu karakter
$i=$i+2; //Byte sebenarnya dihitung sebagai 2
$n++; //Panjang string dihitung sebagai 1
}
elseif ($ascnum>=65 && $ascnum<=90) //Jika huruf besar,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //Jumlah Byte sebenarnya masih dihitung sebagai 1
$n++; //Tetapi mengingat tampilan keseluruhan, huruf besar dihitung sebagai satu karakter bit tinggi
}
else //Dalam kasus lain, sertakan huruf kecil dan tanda baca setengah lebarnya,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //Jumlah Byte sebenarnya adalah 1
$n=$n+0.5; //Huruf kecil dan tanda baca setengah lebarnya adalah setengah lebar karakter tingkat tinggi...
}
}
if ($str_length>$panjang potong){
$returnstr = $returnstr . "...";//Tambahkan elipsis di akhir jika panjangnya melebihi
}
return $returnstr;
}
Mencegat fungsi string utf-8
fungsi FSubstr($title,$start,$len="",$magic=true)
{
/**
* didukung oleh Smartpig
* mailto:[email protected]
*/
if($len == "") $len=strlen($judul);
jika($mulai != 0)
{
$startv = ord(substr($judul,$mulai,1));
jika($mulai >= 128)
{
jika($mulai < 192)
{
untuk($i=$mulai-1;$i>0;$i--)
{
$tempv = ord(substr($judul,$i,1));
if($tempv >= 192) istirahat;
}
$mulai = $i;
}
}
}
if(strlen($judul)<=$len) return substr($judul,$mulai,$len);
$alen = 0;
$blen = 0;
$angka nyata = 0;
untuk($i=$mulai;$i<strlen($judul);$i++)
{
$ctype = 0;
$clangkah = 0;
$cur = substr($judul,$i,1);
if($cur == "&")
{
if(substr($judul,$i,4) == "<")
{
$clangkah = 4;
$panjang += 4;
$i += 3;
$angka nyata++;
jika($ajaib)
{
$alen++;
}
}
else if(substr($judul,$i,4) == ">")
{
$clangkah = 4;
$panjang += 4;
$i += 3;
$angka nyata++;
jika($ajaib)
{
$alen++;
}
}
else if(substr($judul,$i,5) == "&")
{
$clangkah = 5;
$panjang += 5;
$i += 4;
$angka nyata++;
jika($ajaib)
{
$alen++;
}
}
else if(substr($judul,$i,6) == """)
{
$clangkah = 6;
$panjang += 6;
$i += 5;
$angka nyata++;
jika($ajaib)
{
$alen++;
}
}
else if(preg_match("/&#(d+);?/i",substr($title,$i,8),$match))
{
$cstep = strlen($cocok[0]);
$panjang += strlen($cocok[0]);
$i += strlen($cocok[0])-1;
$angka nyata++;
jika($ajaib)
{
$blen++;
$ctype = 1;
}
}
}kalau tidak{
if(ord($skr)>=252)
{
$clangkah = 6;
$panjang += 6;
$i += 5;
$angka nyata++;
jika($ajaib)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=248){
$clangkah = 5;
$panjang += 5;
$i += 4;
$angka nyata++;
jika($ajaib)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=240){
$clangkah = 4;
$panjang += 4;
$i += 3;
$angka nyata++;
jika($ajaib)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=224){
$clangkah = 3;
$panjang += 3;
$i += 2;
$angka nyata++;
jika($ajaib)
{
$ctype = 1;
$blen++;
}
}elseif(ord($cur)>=192){
$clangkah = 2;
$panjang += 2;
$i += 1;
$angka nyata++;
jika($ajaib)
{
$blen++;
$ctype = 1;
}
}elseif(ord($cur)>=128){
$panjang += 1;
}kalau tidak{
$clangkah = 1;
$panjang +=1;
$angka nyata++;
jika($ajaib)
{
if(ord($skr) >= 65 && ord($skr) <= 90)
{
$blen++;
}kalau tidak{
$alen++;
}
}
}
}
jika($ajaib)
{
if(($blen*2+$alen) == ($len*2)) istirahat;
if(($blen*2+$alen) == ($len*2+1))
{
jika($ctype == 1)
{
$panjang -= $clangkah;
merusak;
}kalau tidak{
merusak;
}
}
}kalau tidak{
if($realnum == $len) istirahat;
}
}
tidak disetel($saat ini);
tidak disetel($alen);
tidak disetel($blen);
tidak disetel($angka nyata);
tidak disetel($ctype);
tidak disetel($cstep);
return substr($judul,$mulai,$panjang);
}