ホームページ  >  記事  >  バックエンド開発  >  PHP_PHP チュートリアルでの中国語文字列のインターセプトに関する問題

PHP_PHP チュートリアルでの中国語文字列のインターセプトに関する問題

WBOY
WBOYオリジナル
2016-07-21 16:12:16710ブラウズ

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

プログラムの説明:

1 len パラメーターは、中国語の文字に基づいています。形式的には、英語の 2 文字に相当します

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 {
if(ord(substr($title,$i,1) ) >= 128) $cnum ++;
}
if($cnum%2 != 0) $start--;

unset($cnum)
}

if(strlen($title)< =$len) 戻り substr($title,$start, $len);

$alen = 0;

for($i=$start;$i< strlen($title);$i++)
{
$ ctype = 0;
$cur = substr($title,$i,1)
{
if(substr($title,$i,4 ) == "<")
$cstep = 4;
$i += 3; if($magic)
{
$alen ++;
}
}
else if(substr($title,$i,4) == ">")
{
$cstep = 4; = 4;
$i += 3;
if($magic)
{
$alen ++;
}
else if(substr($title,$i,5) "&")
{
$cstep = 5;
$ Realnum ++;
$ ALEN ++ ) == "")
{
$cstep = 6;
$i += 5;
if($magic)
{
$alen ++ }
if( substr($title,$i,6) == "'")
$cstep = 6;
$i += 5;
$realnum ++ ;
{
$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 -= $cstep;
休憩;
}else{
休憩;
}
}
}else{
if($realnum == $len) break;
}
}

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

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

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/313733.html技術記事以下のコードは GB2312 コードに使用されており、抽出中の文字列は PHP の 1 つである問題点であり、解決方法は、値が 128 より大きいかどうかに基づいて、二文字文字であるかどうかを判断し、回避します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。