ホームページ  >  記事  >  バックエンド開発  >  phpのsubstr関数が中国語の文字化けをインターセプトした場合はどうすればよいですか?

phpのsubstr関数が中国語の文字化けをインターセプトした場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-09-20 10:47:363314ブラウズ

php substr 関数は、UTF-8 の中国語文字を 3 バイトとして扱うため、中国語の文字をインターセプトし、文字化けを生成します。文字化けを解決するには、代わりに mb_strlen 関数と mb_substr 関数を使用します。

phpのsubstr関数が中国語の文字化けをインターセプトした場合はどうすればよいですか?

#この記事の動作環境: Windows7 システム、PHP7.1、Dell G3 コンピューター。

PHP の substr 関数が中国語の文字化けをインターセプトした場合はどうすればよいですか?

PHP で substr を使用して中国語の文字化けをインターセプトするための解決策

PHP では、substr は文字列をインターセプトするためによく使用されますが、Wh​​en の実装に使用する場合中国語の文字がインターセプトされ、文字化けが発生します。 例:

<?php
$mystring="今天天气真好";
$mysubstring=substr($mystring,0,2);
echo $mysubstring;
?>

出力結果は �;

原因分析: substr 関数のプロトタイプは次のとおりです: string substr (string $string, int $ start [, int $length ] )、$length は返されるバイト長を表し、中国語文字は 2 バイトを占めます。UTF-8 中国語文字の場合、3 バイトとして扱われます。

<?php
$length=strlen($mystring);echo $length;//输出结果为18
?>

つまり、$length を 3 にすると、「Jin」という単語が正常に返されます。この場合、中国語と英語が混在している場合は、$length を慎重に計算する必要があります。

では、もっと良い解決策はあるのでしょうか? Php は追加関数 mb_strlen および mb_substr

<?php
$length=mb_strlen($mystring);
$mysub=mb_substr($mystring,0,4);
echo "the length is:$length,","the substr is:$mysub";
?>

を提供します。出力結果は次のとおりです。長さは 6、部分文字列は次のとおりです。今日の天気

mb_strlen 関数のプロトタイプは int mb_strlen(string string_input, string encode) です。 ; エンコードのデフォルトは UTF-8 で、UTF-8 でエンコードされた中国語の文字は

としてカウントされます。 注: mb_strlen と mb_substr は PHP のコア関数ではありません。事前に php.ini を開く必要があります。 use.extension=php_mbstring.dll

推奨学習: 「

PHP ビデオ チュートリアル

以上がphpのsubstr関数が中国語の文字化けをインターセプトした場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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