PHP開発では、マルチバイト文字列を扱う際に、特に多言語Webサイトを処理したり、異なるクライアントからのデータを処理する場合、 MBSTring拡張機能を使用して文字エンコードの正しさを確保します。リクエストで文字エンコードを正しく処理するために、 mb_http_input()およびmb_get_info()は非常に実用的なツールです。
この記事では、これら2つの機能を介してHTTP要求で文字エンコーディングを取得する方法を詳細に説明し、それらの使用と違いを説明します。
MB_HTTP_INPUT()関数を使用して、HTTP入力の文字エンコードを検出できます。検出できる入力タイプは次のとおりです。
「G」 :データを取得します
「P」 :データを投稿します
「C」 :Cookieデータ
's' :string input(all)
'i' ' :自動検出(優先度:post> get> cookie)
<?php
// テスト POST データの文字エンコーディング
$post_encoding = mb_http_input('P');
if ($post_encoding) {
echo "POST 要求された文字エンコードはです: {$post_encoding}\n";
} else {
echo "未能テスト到 POST 要求されたエンコード\n";
}
?>
たとえば、フォームでデータを送信する場合:
<form method="post" action="https://gitbox.net/submit.php">
<input type="text" name="username">
<input type="submit" value="提出する">
</form>
上記のPHPスクリプトは、提出された投稿データ(UTF-8やEUC-JPなど)で使用されるエンコードを検出できます。
MB_GET_INFO()は、 MBSTringの現在の構成情報を返すことができる多機能診断機能です。通話中にパラメーターが渡されない場合、すべての情報が返されます。特定のプロジェクト名を渡して、 「http_input」などの特定の設定を照会することもできます。
<?php
// すべてを取得します mbstring 情報
$mb_info = mb_get_info();
echo "現在 HTTP 入力コードはに設定されています: " . $mb_info['http_input'] . "\n";
// またはただ取得します http_input 一部
$http_input = mb_get_info("http_input");
echo "HTTP エンコード設定を入力します: {$http_input}\n";
?>
注: MB_GET_INFO( "HTTP_INPUT")は、実際の要求データではなく、MBSTringのデフォルトの入力エンコード設定( Auto 、 UTF-8など)を返します。したがって、 MB_HTTP_INPUT()は、「実際のリクエストで使用されるエンコード」をチェックするための最初の選択肢です。
サーバーがクライアントからデータを正しく受信して処理できるようにしたい場合は、以下は実用的なアプリケーション方法です。
<?php
// デフォルトの文字エンコードを設定します
mb_internal_encoding("UTF-8");
mb_http_input("auto");
// 得る POST 要求された実際の文字エンコード
$actual_encoding = mb_http_input('P');
// 得る mbstring 現在 HTTP 設定を入力します
$configured_encoding = mb_get_info("http_input");
echo "実際の要求コードはです: {$actual_encoding}\n";
echo "mbstring 構成 HTTP 設定を入力します为: {$configured_encoding}\n";
?>
このコードは、開発者がCarled Charatureをトラブルシューティングするのに役立ちます。クライアントから送信されたエンコードがサーバーの構成と一致しないか、MBSTRing設定がデフォルトの動作をオーバーライドできないかどうか。
mb_http_input()を使用して、リクエストで実際に使用される文字エンコードを取得します。
MB_GET_INFO()を使用して、デフォルトのHTTP入力エンコーディングを含むMBSTringの現在の構成を取得します。
2つの組み合わせにより、コーディングの問題をより包括的な理解とデバッグを可能にし、アプリケーションがユーザーの入力を正しく処理できるようにします。
多言語Webサイトまたは国際フォームデータを処理するときに、 MBSTRINGが常に有効になり、正しく構成され、サーバーの動作が上記の方法を介してクライアントデータと一致するかどうかを定期的に確認することをお勧めします。
文字化けされた文字コードの問題をデバッグしたり、さまざまなロケールを含むアプリケーションを開発したりしていますか?