ホームページ >php教程 >php手册 >PHP での中国語文字列のインターセプトに関する問題

PHP での中国語文字列のインターセプトに関する問題

WBOY
WBOYオリジナル
2016-06-13 12:47:091093ブラウズ

次のコードは GB2312 エンコードに使用されます。PHP では中国語の文字列をインターセプトするのが問題です。その解決策は、文字化けを避けるために、値が 128 以上であるかどうかに基づいてそれが 2 バイト文字であるかどうかを判断することです。ただし、中国語と英語の混合、特殊記号などの問題は常にあります。ここで、参考のために、より包括的なものを書きます。

プログラムの説明:

1。

2 の形式で見栄えを良くするために、中国語の文字に基づいており、1len は英語の 2 文字に相当します。マジック パラメータが false に設定されている場合、中国語と英語は同等に扱われ、その絶対数は文字は取得されます

3. htmlspecialchars() でエンコードされた文字列に特に適しています

4. GB2312 (𖰰) のエンティティ文字モードを正しく処理できます

プログラムコード:
function FSubstr($title, $start,$len="",$magic=true)
{
/**
* powered by Smartpig
* mailto:d.einstein@263.net
  */

$length = 0;
if($len == " ") $len = strlen($title);

//開始位置が間違っていると判断
if($start > 0)
{
$cnum = 0;
for($i=0;$i<$start;$i )
{
if(ord(substr($title,$i,1) )) >= 128) $cnum ;
}
if($cnum%2 != 0) $start--;

unset($cnum); >
if(strlen($title)< ;=$len) return substr($title,$start,$len);

$alen = 0; 🎜>
$realnum = 0;

for($i=$start;$i{
$ctype = 0; > $cstep = 0;
$cur = substr($title,$i,1);
if($cur == "&")
{
if(substr($title, $i,4) == "<")
{
$cstep = 4;
$i = 3;
($magic)
{
$ alen ;
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4;
$i = 3;
if($magic)
{
$alen ; }
}
else if(substr ($title,$i,5) == "&")
{
$cstep = 5;
$i = 4;
$realnum ;
if($magic)
{
$alen ;
}
else if(substr($title,$i) ,6) == """)
{
$cstep = 6;
$length = 6;
$i = 5;
$realnum ;
if($magic )
{
$alen ;
}
}
else if(substr($title,$i,6) == "'")
{
$cstep = 6;
$i = 5;
if($magic)
{
$alen ; }
else if(preg_match("/& #(d );/i",substr($title,$i,8),$match))
{
$cstep = strlen($match [0]);
$length = strlen($match[0])-1;
$realnum ; )
{
$blen
$ctype = 1;
}
}else{
if(ord($cur)>>=128)
{
$cstep = 2;
$length = 2;
$i = 1;
$realnum ;
if($magic)
{
$blen ;
$ctype = 1;
}
}else{
$cstep = 1;
$length =1;
$realnum ;
if($magic)
{
$alen ;
}
}
}

if($magic)
{
if(($blen*2 $alen) == ($len*2)) break ;
if(($blen*2 $alen) == ($len*2 1))
{
if($ctype == 1)
{
$length -= $ cステップ;
休憩;
}else{
休憩;
}
}
}else{
if($realnum == $len) break;
}
}

unset($cur);
設定を解除($alen);
設定を解除($blen);
unset($realnum);
unset($ctype);
設定解除($cstep);

return substr($title,$start,$length);
}

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。