ホームページ >バックエンド開発 >PHPチュートリアル >.chr(0) を使用して中国語の文字をインターセプトし、PHP での文字化けを防ぐ方法

.chr(0) を使用して中国語の文字をインターセプトし、PHP での文字化けを防ぐ方法

PHP中文网
PHP中文网オリジナル
2016-07-25 08:57:091379ブラウズ

PHP コード

<?php    
$len = 19;    
$text = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";    
echo strlen($text)<=$len ? $text : (substr($text,0,$len).chr(0)."....");    
?>

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

null は何もなく、chr(0) の値は 0 です。 16進数で表現すると0x00、2進数で表現すると00000000になります

chr(0)は何も表示しませんが、文字です。

中国語の文字が切り捨てられると、エンコード規則に従って、必ず後ろの他の文字を引き込んで中国語として解釈する必要があるため、文字化けが発生します。 0x81~0xffと0x00の値の組み合わせは常に「空」として表示されます

この機能により、substr結果の後にchr(0)を追加することで文字化けを防ぐことができます

注:

エンコード番号 1バイト2 番目のバイト

gb2312 0xa1-0xf7 0xa1-0xfe

gbk 0x81-0xfe 0x81-0xfe 0x40-0x7e

big5 0xa1-0xf7 0x81-0xfe 0x40-0x7e

別の方法:

PHP コード

function csubstr($text, $limit) {    
    $s = &#39;;    
    for($i=0;$i< $limit-3;$i++) {    
        $s .= ord($text[$i])>127 ? $text[$i].$text[++$i] : $text[$i];    
    }    
    return $s;    
}

上記は gb2312 エンコーディングにのみ適用されます。UTF-8 の場合は、4 行目を

PHP コード

$s .= ord($text[$i])> $text[ ? $i].$text[++$i].$text[++$i] : $text[$i];

UTF-8 の中国語文字は 3 バイトです。


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