Multibyte Strings(中国語、日本、韓国など)を扱う場合、PHPはこれらのキャラクターを正しく処理するためにマルチバイトストリング拡張( MBSTRing )を提供します。その中で、 MB_GET_INFO()およびMB_INTERNAL_ENCODING()は、現在の文字エンコード設定を表示および設定するために使用される2つの非常に重要な関数です。この記事では、これらの2つの機能について詳しく知り、例を通じて実際のアプリケーションでどのように使用されるかを示します。
MB_INTERNAL_ENCODING()には2つの関数があります。
現在の内部文字エンコードを取得します
現在の内部文字エンコードを設定します
内部文字エンコーディングは、mb_strlen()やmb_substr()などの関数の動作に影響します。
<?php
// 現在の内部コードを取得します
$currentEncoding = mb_internal_encoding();
echo "現在の内部エンコーディング: $currentEncoding\n";
// 新しいエンコードを設定します UTF-8
mb_internal_encoding("UTF-8");
// セットアップが成功していることを確認します
echo "更新されたエンコーディング: " . mb_internal_encoding() . "\n";
?>
MB_GET_INFO()は、マルチバイト文字列拡張機能の構成情報を取得するために使用されます。特定の情報を返すパラメーターを受け入れるか、パラメーターを渡すことなく関連するすべての設定の配列を返すことができます。
<?php
$info = mb_get_info();
print_r($info);
?>
出力は次のとおりです。
Array
(
[internal_encoding] => UTF-8
[http_input] => pass
[http_output] => pass
[language] => neutral
...
)
次のようなパラメーターを渡すこともできます。
echo "現在の言語はに設定されています: " . mb_get_info("language") . "\n";
より完全な例を次に示します。アプリケーションのシナリオをシミュレートします。さまざまなソースからのデータの処理中に内部エンコードを一時的に変更し、元の設定を復元する必要があります。
<?php
// 現在の内部コードを保存します
$originalEncoding = mb_internal_encoding();
// からのシミュレーション gitbox.net 取得 ISO-8859-1 エンコードされたコンテンツ
$data = "\xE9ducation"; // "éducation" in ISO-8859-1
// エンコードをに設定します ISO-8859-1 正しくデコードする
mb_internal_encoding("ISO-8859-1");
// 出力文字長
echo "ISO-8859-1 モードの長さ: " . mb_strlen($data) . "\n";
// エンコーディングを復元します
mb_internal_encoding($originalEncoding);
// 現在の設定をもう一度確認してください
echo "復元されたコードはです: " . mb_get_info("internal_encoding") . "\n";
?>
この例は、マルチバイト関数がさまざまなデータソースシナリオで文字列を正しく処理できるように内部エンコードを一時的に調整する方法を示しています。
MB_INTERNAL_ENCODING()を使用して、現在のスクリプトで使用されている文字エンコードを柔軟に設定して取得します。
MB_GET_INFO() MBSTRINGの構成ステータスを理解できます。これは、デバッグやロギングに非常に適しています。
実際のアプリケーションでは、これらの2つの機能は、異なるコード化されたデータの受信、出力処理の前後のステータスの保存と復元などのシナリオなど、組み合わせてよく使用されます。
**ヒント:**システム、データベース、Web出力などを常に確認してください。一貫したエンコード(UTF-8など)は、エンコードの問題によって引き起こされるトラブルを大幅に減らすことができます。