Webエンコーディングの検出または処理を実行する場合、PHPのMB_GET_INFO()関数は、非常に便利な現在のマルチバイト文字列設定に関する情報を提供できます。ただし、実際の使用中、開発者はしばしばいくつかの問題に遭遇します。この記事では、MB_GET_INFO()を使用してWebエンコーディングを確認する場合、一般的なエラーとソリューションをまとめます。
エラーの説明: mb_get_info()を直接呼び出しますが、システムは関数が見つからないことを促します。
原因分析: MB_GET_INFO()はMBSTRING拡張機能に属します。 PHPがMBSTRINGをインストールまたは有効にしない場合、関連する関数を呼び出すときにエラーが発生します。
回避策: PHP.INIファイルでMBSTRING拡張機能が有効になっていることを確認してください。例えば:
extension=mbstring
サーバーがインストールされていない場合は、次のコマンドを参照してインストールできます(ubuntuを例にとらえます):
sudo apt-get install php-mbstring
sudo service apache2 restart
インストール後、テストページにアクセスしてください。
https://gitbox.net/test_mb.php
MB_GET_INFO()が正常に機能することを確認してください。
エラーの説明: mb_get_info()がWebページのコンテンツのエンコード情報を直接返すことを願っています。結果は構成配列です。
原因分析: MB_GET_INFO()は、 Webページの実際のエンコードを直接伝えるのではなく、PHP MBSTring構成(内部エンコード、言語設定など)の現在のステータス(内部エンコード、言語設定など)を返します。
回避策: Webページコンテンツの実際のエンコードを検出する場合は、 MB_Get_Info()の代わりにMB_DETECT_ENCODING()を使用する必要があります。
例:
$content = file_get_contents('https://gitbox.net/page.html');
$encoding = mb_detect_encoding($content, mb_list_encodings(), true);
echo "Webエンコーディングはそうかもしれません:$encoding";
エラーの説明: MB_GET_INFO()は内部エンコーディングをチェックするために使用されますが、マルチバイト文字列を処理するときはまだ文字化けコードが発生します。
原因分析:デフォルトの内部エンコーディングはUTF-8ではない場合があり、 MB_STRLEN()やMB_Substr()などの関数が例外を返します。
解決策:処理する前に、次のような正しい内部エンコードを積極的に設定します。
mb_internal_encoding('UTF-8');
次に、 MB_GET_INFO()に電話して、設定が成功しているかどうかを確認します。
print_r(mb_get_info());
エラーの説明: MB_GET_INFO()を呼び出すときにパラメーターは渡されませんでした。取得した情報は十分ではありませんでした。
原因分析: mb_get_info()を使用すると、文字列パラメーター( "http_input" 、 "http_output" 、 "internal_encodingなど)を渡すことができます。パラメーターが渡されない場合、すべての情報が返されます。
解決策:内部エンコーディングなど、特定のアイテムのみを確認する場合は、次のように書くことができます。
$encoding = mb_get_info("internal_encoding");
echo "現在の内部コードはです:$encoding";
アクセス結果例:
https://gitbox.net/show_encoding.php
mb_get_info()を使用してWebエンコードをチェックするときは、覚えておいてください。
mbstring拡張機能が有効になっていることを確認してください。
Webページのエンコーディングを検出しないクエリ設定ステータスであることを理解してください。
内部エンコーディングを正しく設定して確認します。
要件に応じて適切なパラメーターを渡します。
Webページの実際のエンコードを実際に検出する必要がある場合は、コンテンツを読む方法でmb_detect_encoding()を使用することを優先してください。