ホームページ  >  記事  >  バックエンド開発  >  php_PHP チュートリアルでの中国語文字列内の疑問符のインターセプト

php_PHP チュートリアルでの中国語文字列内の疑問符のインターセプト

WBOY
WBOYオリジナル
2016-07-13 10:44:101116ブラウズ

PHP の組み込み関数を使用して中国語の文字をインターセプトすると、時々疑問符が表示されることがあります。以下に、中国語の文字を正確にインターセプトする非常に良い例をいくつかまとめました。

文字列を操作する際の PHP の問題は次の 2 つの問題にすぎません:
1. 文字列エンコーディングが gbk であるか unicode であるかを確認します。
2. 対応するコードに対応する傍受方法を採用します。

一般に、substr を使用して中国語の文字をインターセプトすると、文字化けが発生する可能性があります。中国語の文字は全角なので、1バイトが挟まれると表示できなくなり文字が乱れてしまいます。

実際、解決策は非常に簡単です。以下のインターセプト関数を見てください:

コードは次のとおりです コードをコピー

//超長い文字列をインターセプトします
関数 curtStr($str,$len=30){
if(strlen($str)>$len){
$str = substr($str,0,$len);
$str .= chr(0) ."…"; $str;
を返します }

上記の chr(0) は null ではありません

null は何も意味せず、chr(0) の値は 0 です。 16進数で表すと0×00、2進数で表すと00000000になります
chr(0)は何も表示されませんが、文字です。
漢字が切り詰められると、エンコード規則に従って、必ずその後ろにある他の文字を引き込んで漢字として解釈する必要があるため、文字化けが発生します。 0x81~0xffと0x00の値の組み合わせは常に「空」と表示されます
この機能により、substrの結果の後にchr(0)を追加することで文字化けを防ぐことができます

中国語の文字列を正確にインターセプトするという目的を達成するために、これら 2 つのポイントを達成するために以下のいくつかの関数を追加しました:

utf8 でエンコードされたマルチバイト文字列をインターセプトします

コードは次のとおりですコードをコピー
// utf8 文字列をインターセプトします
関数 utf8Substr($str, $from, $len)
{
preg_replace('#^(?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$from.'}' を返します。
'((?:[x00-x7F]|[xC0-xFF][x80-xBF]+){0,'.$len.'}).*#s', ‘$1’,$str); }
?>


漢字インターセプト機能はUTF-8とGB2312の両方に対応

コードは次のとおりです コードをコピー
/*
漢字インターセプト機能が Utf-8 と gb2312 でサポートされました
cut_str(文字列、カット長、開始長、エンコーディング); エンコードのデフォルトは utf-8 です
デフォルトの開始長は 0 です
*/

関数cut_str($string, $sublen, $start = 0, $code = 'UTF-8')
{
If($code == 'UTF-8')
                                                                    $pa = "/[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]/";
Preg_match_all($pa, $string, $t_string);
If(count($t_string[0]) - $start > $sublen) return join('', array_slice($t_string[0], $start, $sublen))."..."; return join('', array_slice($t_string[0], $start, $sublen));                                                                                                                                                                                                                               $start = $start*2; $sublen = $sublen*2; $strlen = strlen($string); $tmpstr = '';
for($i=0; $i                                                                            If($i>=$start && $i                                                                        If(ord(substr($string, $i, 1))>129)
                                                                                以来                                                                               それ以外                                                                                 以来                                                                                                                                                                    If(ord(substr($string, $i, 1))>129) $i++;                                                                      If(strlen($tmpstr)
$str = "インターセプトする必要がある abcd 文字列"; echo Cut_str($str, 8, 0, 'gb2312');?>

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/633112.html技術記事 PHP の組み込み関数を使用して中国語の文字をインターセプトするときに疑問符が発生することがあります。以下に、中国語の文字を正確にインターセプトする非常に良い例をいくつかまとめました。 PHPの文字列操作は問題ありません...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。