【PHP8.x】mb_http_input関数の使い方

作成日: 更新日:

mb_http_input関数は、HTTP入力の文字エンコーディングを取得または設定する処理を実行する関数です。Webアプリケーションにおいて、ブラウザから送信されるフォームデータ(GETリクエストのクエリ文字列やPOSTリクエストのボディなど)がどの文字エンコーディングで送られてきたかをPHPに認識させるために使用されます。この関数には2つの使い方があります。一つは、引数に UTF-8SJIS-win のような文字エンコーディング名を文字列として渡す方法で、これによりHTTP入力のエンコーディングが指定した値に設定されます。設定が成功した場合は true を、失敗した場合は false を返します。もう一つは、引数を何も指定せずに呼び出す方法で、この場合は現在設定されているHTTP入力の文字エンコーディング名を文字列として返します。ここで設定されたエンコーディングは、mb_parse_str といった他のマルチバイト文字列関数が、受け取ったデータを内部文字エンコーディングへ変換する際の変換元として利用されます。この関数の初期値は、php.ini ファイルの mbstring.http_input ディレクティブの設定に依存します。

基本的な使い方

構文(syntax)

mb_http_input(?string $type = null): array|string|false

引数(parameters)

?string $type = null

  • ?string $type = null: 取得したいHTTP入力のタイプを指定します。'GET', 'POST', 'COOKIE', 'POST_RAW', 'FILES' のいずれか、またはそれらをカンマ区切りで指定できます。null の場合は、すべてのタイプが対象となります。

戻り値(return)

array|string|false

指定されたHTTPリクエストヘッダーの内容を、指定されたエンコーディングで返します。エンコーディングが指定されない場合は、auto-detectされます。ヘッダーが見つからない、またはヘッダーが破損している場合はfalseを返します。

サンプルコード

mb_http_input PHP 8 入力エンコーディング取得

<?php

declare(strict_types=1);

/**
 * mb_http_input() の使用例を示します。
 *
 * この関数はHTTPリクエストの入力文字エンコーディングを取得します。
 * Webサーバー環境で実行されることを想定した関数です。
 *
 * @see https://www.php.net/manual/ja/function.mb-http-input.php
 */
function showHttpInputEncodingExample(): void
{
    /*
     * 重要: mb_http_input() は PHP 8.0.0 で非推奨 (deprecated) になりました。
     * この関数が依存していた php.ini ディレクティブ `mbstring.http_input` は削除されており、
     * 現代のPHP環境では意図通りに動作しない可能性があります。
     * このサンプルは、関数の歴史的な使い方を理解するために提供されています。
     */

    // 引数を指定しない場合、設定されている入力エンコーディングを取得します。
    // コマンドラインで実行した場合や、設定がない場合は false を返すことがあります。
    echo '現在の入力エンコーディング:' . PHP_EOL;
    $currentInputEncoding = mb_http_input();
    var_dump($currentInputEncoding);
    echo PHP_EOL;

    // 引数に 'I' (全て) を指定すると、
    // GET, POST, COOKIE 等の入力タイプごとのエンコーディングを配列で取得します。
    echo '全ての入力タイプのエンコーディング:' . PHP_EOL;
    $allInputEncodings = mb_http_input('I');
    var_dump($allInputEncodings);
    echo PHP_EOL;

    // 現代のPHPでは、$_GET や $_POST などのスーパーグローバル変数を直接扱い、
    // 必要に応じて mb_convert_encoding() などで文字エンコーディングを
    // 明示的に変換する方法が一般的です。
}

// 関数を実行して結果を表示します。
showHttpInputEncodingExample();

mb_http_input()は、Webサーバーが受け取ったHTTPリクエストの入力文字エンコーディングを取得するための関数です。しかし、この関数はPHP 8.0.0で非推奨となりました。関連する設定がPHPから削除されたため、現代の環境では意図通りに動作しない可能性がある点に注意が必要です。この説明は、関数の歴史的な役割を理解するためのものとしてご覧ください。

引数を指定せずにこの関数を呼び出すと、設定されている入力エンコーディング名を文字列として返します。設定がない場合や、Webサーバー以外の環境で実行した場合はfalseを返すことがあります。引数に特定の文字(例: 'I')を渡すと、GET、POST、COOKIEといった入力ソースごとのエンコーディングを配列形式で取得できます。

戻り値は、取得したエンコーディング名の文字列、エンコーディング名の配列、または取得に失敗した場合のfalseのいずれかです。

現代のPHP開発では、この関数に頼るのではなく、$_GET$_POSTなどのスーパーグローバル変数を直接扱い、mb_convert_encoding()関数などを用いて明示的に文字エンコーディングを変換する方法が一般的です。

このmb_http_input関数はPHP 8.0で非推奨になりました。関連する設定が廃止されたため、現代のPHP環境では意図通りに動作しない可能性があります。この関数はWebサーバーでの利用を前提としており、コマンドラインで実行すると多くの場合falseを返します。現在の開発では、この関数に頼らず、受け取ったデータに対してmb_convert_encoding関数などを使い、文字エンコーディングを明示的に変換する方法が推奨されます。古いコードを理解する目的でのみ参考にし、新しいコードでは使用しないでください。

【PHP8.x】mb_http_input関数の使い方 | いっしー@Webエンジニア