ホームページ >バックエンド開発 >PHPチュートリアル >php substr 中国語の文字化けコードの解決策
substr を直接使用して中国語の文字列をインターセプトすると、中国語の文字が半分に分割されるため、必ず文字化けが発生します。なぜこれは、マシンの内部エンコーディングの問題によるものでしょうか。解決策
1. mbstring 拡張ライブラリ mb_substr インターセプトを使用すると文字化けが発生しません。
2. インターセプト関数を自分で作成しますが、効率は mbstring 拡張ライブラリを使用するほど高くありません。
3. インターセプトされた文字列を出力するだけの場合は、次の方法で実装できます: substr($str, 0, 30).chr(0)。
PHP のサンプル コードは次のとおりです。 * 中国語の文字化けを回避できます
* パラメータ $str は文字列、$start は開始文字、$len は終了文字
* インターセプトされた文字を返します
*/
function msubstr($str, $ start, $len) {
$tmpstr = "";//オープンソースコード phpfensi.com
$strlen = $start + $len)
for($i = 0; $i < $strlen; $ i++) {
if(ord(substr( $str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2) } else
$tmpstr .= substr($str , $i, 1);
}
return $tmpstr;
方法 2、文字化けせずに中国語のテキスト文字列をインターセプトするための PHP メソッド、コードは次のとおりです
function gbsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
for($i=$start;$i
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($ string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
$str.'. .';
}else{
$string を返す
}
;