現在の位置: ホーム> 最新記事一覧> MB_GET_INFOを使用して、キャラクターエンコード変換の文字化けの問題を解決します

MB_GET_INFOを使用して、キャラクターエンコード変換の文字化けの問題を解決します

gitbox 2025-05-11

多言語のWebサイトを開発したり、外部データソースを処理する場合、文字エンコードの混乱はしばしば頭痛の種です。エンコード設定が正しくない場合、少なくとも文字化けコードが発生し、データが失われ、機能が異常になります。
PHPでは、 MbString拡張機能は、マルチバイト文字を処理するための多くの機能を提供します。その中には、MB_GET_INFO()は、エンコードの問題を配置するための非常に便利なツールです。

mb_get_info()とは

MB_GET_INFO()は、PHP MBSTring拡張機能の関数であり、現在のマルチバイト文字列処理の構成情報を取得します。
現在の内部エンコーディング、HTTP入力/出力エンコード、言語設定などを返すことができ、スクリプトの現在のエンコード環境を迅速に理解するのに役立ちます。

関数の署名は非常に単純です:

 array mb_get_info ([ string $type = "all" ] )

パラメーターが渡されない場合、すべての構成情報がデフォルトで返されます。 「internal_encoding」などのタイプを渡すと、対応する情報のみが返されます。

キャラクターエンコーディングが文字化けコードを引き起こすのはなぜですか?

PHPは、特にUTF-8、GBK、Shift-JISなどのマルチバイトエンコーディングを処理する場合、デフォルトでキャラクターエンコードに対して「敏感」ではありません。わずかに不適切に処理されている場合、文字化けコードが発生します。
一般的な理由は次のとおりです。

  • 入力エンコーディングは、スクリプト処理と矛盾しています

  • 出力のエンコーディング設定が正しくありません

  • データベース接続中のエラーのエンコード

  • サーバーのデフォルトのロケール設定の問題

現時点では、現在の環境でどのエンコーディングが使用されているかわからない場合、適切な薬を処方することは困難です。およびMB_GET_INFO()は、調べるのに役立ちます。

MB_GET_INFO()でGarled Codeをトラブルシューティングする方法は?

MB_GET_INFO()を使用して問題を見つける方法を示す簡単な例を次に示します。

 <?php
// 現在のマルチバイト処理のすべての構成を表示します
$info = mb_get_info();
print_r($info);

// 内部コーディングに焦点を当てます
echo "Internal Encoding: " . mb_internal_encoding() . PHP_EOL;

// エンコードをに設定します UTF-8,文字化けのコードは避けてください
mb_internal_encoding("UTF-8");

// もう一度確認してください
echo "New Internal Encoding: " . mb_internal_encoding() . PHP_EOL;
?>

出力は次のとおりです。

 Array
(
    [internal_encoding] => UTF-8
    [http_output] => UTF-8
    [http_input] => UTF-8
    [language] => neutral
    ...
)
Internal Encoding: UTF-8
New Internal Encoding: UTF-8

internal_encodingがUTF-8 (たとえば、 ISO-8859-1 )ではないことがわかった場合、それは文字化けコードのソースである可能性があります。
MB_INTERNAL_ENCODING( "UTF-8")で直接リセットすることにより、文字化けコードの問題を回避できます。

実用的なケース:WebページへのCarled Code Outputを防ぎます

このように、ユーザー入力をフロントエンドに返す簡単なインターフェイスがあるとします。

 <?php
header('Content-Type: text/html; charset=UTF-8');

// 現在の内部コードを確認してください
if (mb_internal_encoding() !== 'UTF-8') {
    mb_internal_encoding('UTF-8');
}

// ユーザーの入力を想定します(おそらくフォームから、インターフェイスなど)
$user_input = "こんにちは,世界!";

// 出力
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>

ここでは、ユーザーがGB2312などの他のエンコーディングを提出したとしても、サーバーがそれらをUTF-8に均一に処理し、それらを出力する場合、文字化けコードの確率を大幅に減らすことができます。
より包括的なエンコード検出が必要な場合は、 MB_DETECT_ENCODING()で使用して自動的に識別および変換することもできます。

追加:ドキュメントアドレス

MB_GET_INFO()MBSTRINGの使用について詳しく知りたい場合は、公式ドキュメントを参照できます。
https://gitbox.net/php/manual/zh/function.mb-get-info.php