現在の位置: ホーム> 最新記事一覧> 文字列の長さ検出のためにMB_GET_INFOとMB_STRLENを組み合わせる方法

文字列の長さ検出のためにMB_GET_INFOとMB_STRLENを組み合わせる方法

gitbox 2025-05-11

PHPでマルチバイト文字列(中国語、日本、韓国など)を処理する場合、標準の文字列関数( Strlenなど)を使用すると、予期しない結果につながることがよくあります。これらの関数は文字ではなくバイトで計算されるためです。現時点では、より正確な文字列操作を実現するには、 MB_STRLENMB_GET_INFOなどのPHPのマルチバイト文字列拡張機能(MBSTring)の関数を使用する必要があります。

この記事では、 MB_STRLENMB_GET_INFOの基本的な使用法を説明し、例を使用して、マルチバイト文字列の長さを正確に検出するのに役立つ方法を説明します。

1.なぜStrlenを直接使用できないのですか?

簡単な例を見てみましょう。

 $str = "こんにちは,世界";
echo strlen($str);  // 出力:15

この文字列には5つの漢字(コンマを含む)しかありませんが、15を返します。これは、UTF-8エンコーディングの下で​​、漢字が通常3バイトを占めるためです。 strlenは、「文字番号」ではなく「バイト番号」をカウントします。

キャラクターの真の数を取得したい場合は、 MB_STRLENを使用する必要があります。

 echo mb_strlen($str);  // 出力:5

このようにして、正しい数の文字を取得します。

2。MB_STRLENを使用して、文字の長さを正確に計算します

MB_STRLENは、マルチバイト文字専用の機能であり、構文は次のとおりです。

 int mb_strlen ( string $str [, string $encoding = mb_internal_encoding() ] )
  • $ str :長さを測定する文字列

  • $エンコード:オプション、エンコードタイプを指定し、デフォルトでMB_INTERNAL_ENCODING()によって返されたエンコードを使用するようにデフォルトで使用する

例:

 $str = "訪問してください https://gitbox.net";
$length = mb_strlen($str, 'UTF-8');
echo "文字の長さはです:$length";

出力:

 文字の長さはです:18

これにより、バイト数ではなく、中国語と英語の混合文字列の「文字の数」が正しくカウントされます。

3. MB_GET_INFOを使用してエンコード情報を取得する方法は?

MB_GET_INFOは、現在のMBSTRING構成、特に内部エンコーディング方法を理解するのに役立ちます。

 $info = mb_get_info();
print_r($info);

出力例:

 Array
(
    [internal_encoding] => UTF-8
    [http_input] => pass
    [http_output] => pass
    [language] => neutral
    [encoding_translation] => 0
    ...
)

これは、UTF-8エンコーディングが現在使用されていることを示しています。 MB_STRLENの計算結果が不正確であることがわかった場合、内部エンコードが正しく設定されているかどうかを確認すると役立ちます。

特定の情報を返すように指定することもできます。

 echo mb_get_info("internal_encoding");  // 出力:UTF-8

4。提案:デフォルトのエンコードを設定します

問題を回避するには、スクリプトの先頭にデフォルトのマルチバイトエンコードを設定することをお勧めします。

 mb_internal_encoding("UTF-8");

これにより、 MB_STRLENMB_SUBSTR 、その他の関数などの関数がUTF-8でエンコードされて文字列を処理することが保証されます。