多言語のWebサイトを開発したり、外部データソースを処理する場合、文字エンコードの混乱はしばしば頭痛の種です。エンコード設定が正しくない場合、少なくとも文字化けコードが発生し、データが失われ、機能が異常になります。
PHPでは、 MbString拡張機能は、マルチバイト文字を処理するための多くの機能を提供します。その中には、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()を使用して問題を見つける方法を示す簡単な例を次に示します。
<?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")で直接リセットすることにより、文字化けコードの問題を回避できます。
このように、ユーザー入力をフロントエンドに返す簡単なインターフェイスがあるとします。
<?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