php.ini の設定により動作が変化します。
| 名前 | デフォルト | 変更可能 | 変更履歴 |
|---|---|---|---|
| mbstring.language | "neutral" | INI_ALL |
|
| mbstring.detect_order | NULL | INI_ALL |
|
| mbstring.http_input | "pass" | INI_ALL |
非推奨になりました。 |
| mbstring.http_output | "pass" | INI_ALL |
非推奨になりました。 |
| mbstring.internal_encoding | NULL | INI_ALL |
非推奨になりました。 |
| mbstring.substitute_character | NULL | INI_ALL |
|
| mbstring.func_overload | "0" | INI_SYSTEM |
PHP 7.2.0 で非推奨になり、PHP 8.0.0 で削除されました。 |
| mbstring.encoding_translation | "0" | INI_PERDIR |
|
| mbstring.http_output_conv_mimetypes | "^(text/|application/xhtml\+xml)" | INI_ALL |
|
| mbstring.strict_detection | "0" | INI_ALL |
|
| mbstring.regex_retry_limit | "1000000" | INI_ALL |
PHP 7.4.0 以降で利用可能です。 |
| mbstring.regex_stack_limit | "100000" | INI_ALL |
PHP 7.3.5 以降で利用可能です。 |
以下に設定ディレクティブに関する 簡単な説明を示します。
mbstring.language
string
mbstring で使用される言語設定(NLS)のデフォルト値。
この設定は mbstring.internal_encoding を定義するため、
php.ini の中で mbstring.internal_encoding は、
mbstring.language の後に置く必要があることに注意してください。
mbstring.encoding_translation
bool
入力される HTTP クエリに関して、 文字エンコーディング検出および内部文字エンコーディングへの変換を行う 透過的な文字エンコーディングフィルタを有効にします。
mbstring.internal_encoding
string
この非推奨の機能は、きっと 将来 削除 されるでしょう。
内部文字エンコーディングのデフォルト値を定義します。
この値は空のままにしておいて、代わりに
default_charset
を設定すべきです。
mbstring.http_input
string
この非推奨の機能は、きっと 将来 削除 されるでしょう。
HTTP 入力文字エンコーディングのデフォルト値を定義します。
この値は空のままにしておいて、代わりに
default_charset
を設定すべきです。
mbstring.http_output
string
この非推奨の機能は、きっと 将来 削除 されるでしょう。
HTTP 出力文字エンコーディングのデフォルト値を定義します (出力は、内部エンコーディングから HTTP 出力エンコーディングに変換された上で出力されます)。
この値は空のままにしておいて、代わりに
default_charset
を設定すべきです。
mbstring.detect_order
string
文字コード検出のデフォルト値を定義します。 mb_detect_order() も参照ください。
mbstring.substitute_character
string
無効な文字を代替する文字を定義します。 サポートされる値は、mb_substitute_character() を参照ください。
mbstring.func_overload
string
この機能は PHP 7.2.0 で 非推奨 になり、PHP 8.0.0 で 削除 されました。この機能に頼らないことを強く推奨します。
シングルバイト対応の関数を mbstring 関数の対応する関数でオーバーロード (置換)します。詳細は、 関数のオーバーロード を参照ください。
この設定は、php.ini でしか変更できません。
mbstring.http_output_conv_mimetypes
string
mbstring.strict_detection
bool
厳密なエンコーディング検出を有効にします。 詳しい説明と例は、mb_detect_encoding() を参照ください。
mbstring.regex_retry_limit
int
mbregex のマッチングの間に行われる、バックトラッキングの量を制限します。
この設定は、oniguruma >= 6.8.0 と PHP をリンクした場合にのみ利用可能です。
mbstring.regex_stack_limit
int
mbstring の正規表現エンジンの、スタックの深さを制限します。
» HTML 4.01 の仕様 によると、Web ブラウザは、 フォームのデータを投稿する際にページで使用される文字エンコーディングと 異なるエンコーディングを使用することができます。 ブラウザで使用される文字エンコーディングを検出するには、 mb_http_input() を参照ください。
一般的に使用されるブラウザでは、
指定したHTML文書の文字エンコーディングをかなり正確に推定することができますが、
header() または設定パラメータ
default_charset により、
Content-Type HTTP ヘッダで charset
を設定する方がより良いでしょう。
例1 php.ini 設定の例
; デフォルトの言語を設定 mbstring.language = neutral; デフォルト言語を中立(UTF-8)に設定 (デフォルト) mbstring.language = English; デフォルト言語を英語に設定 mbstring.language = Japanese; デフォルト言語を日本語に設定 ;; デフォルトの内部エンコーディングを設定 ;; 注意: PHPで動作する文字エンコーディングを使用すること mbstring.internal_encoding = UTF-8 ; 内部エンコーディングを UTF-8 に設定 ;; HTTP入力エンコーディング変換を有効にする mbstring.encoding_translation = On ;; デフォルトのHTTP入力文字エンコーディングを設定 ;; 注意: スクリプトではhttp_inputの設定は変更できません。 mbstring.http_input = pass ; 変換しない。 mbstring.http_input = auto ; HTTP 入力を auto に設定 ; "auto" は mbstring.language の設定を使って展開されます mbstring.http_input = SJIS ; HTTP入力をSJISに設定 mbstring.http_input = UTF-8,SJIS,EUC-JP ; 順番を指定 ;; デフォルトのHTTP出力文字エンコーディングを設定 mbstring.http_output = pass ; 変換しない mbstring.http_output = UTF-8 ; HTTP出力エンコーディングを ; UTF-8 に指定 ;; デフォルトの文字エンコーディング検出順序を設定 mbstring.detect_order = auto ; デフォルトの順番を auto に設定 mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; 順番を指定 ;; 代替文字のデフォルト値を設定 mbstring.substitute_character = 12307 ; Unicode 値を指定 mbstring.substitute_character = none ; 文字を出力しない mbstring.substitute_character = long ; long の例: U+3000,JIS+7E7E
例2 EUC-JP ユーザー用の php.ini の設定
;; 出力バッファリングを無効にする output_buffering = Off ;; HTTP charsetヘッダを設定 default_charset = EUC-JP ;; デフォルトの言語を日本語にする mbstring.language = Japanese ;; HTTP 入力変換を有効にする mbstring.encoding_translation = On ;; HTTP 入力エンコーディング変換を auto に設定 mbstring.http_input = auto ;; HTTP 出力を EUC-JP に設定 mbstring.http_output = EUC-JP ;; 内部エンコーディングを EUC-JP に設定 mbstring.internal_encoding = EUC-JP ;; 無効な文字を出力しない mbstring.substitute_character = none
例3 SJIS ユーザー用の php.iniの 設定
;; 出力のバッファリングを有効に output_buffering = On ;; 出力の変換を有効にするために mb_output_handler を設定 output_handler = mb_output_handler ;; HTTPヘッダ charset を設定 default_charset = Shift_JIS ;; デフォルトの言語を日本語に設定 mbstring.language = Japanese ;; HTTP 入力変換を有効にする mbstring.encoding_translation = On ;; HTTP 入力エンコーディング変換を auto に設定 mbstring.http_input = auto ;; SJIS に変換 mbstring.http_output = SJIS ;; 内部エンコーディングを EUC-JP に設定 mbstring.internal_encoding = EUC-JP ;; 無効な文字を出力しない mbstring.substitute_character = none
String literals in the PHP script are encoded with the same encoding that the PHP file was saved with. This is not affected by default_charset or other .ini settings.
Scenario: The default_charset is KOI8-R, and there is a text file "input.txt" containing the string "Это текст для поиска." in KOI8-R encoding.
A PHP script is written:
<?php
// mb_internal_encoding('KOI8-R');
$string = 'текст.';
$data = file_get_contents('input.txt');
echo mb_strpos($data, $string);
?>
But unfortunately it was saved as UTF-8.
It doesn't work; mb_strpos() returns false because it can't find the UTF-8-encoded "текст" inside the KOI8-R-encoded "Это текст для поиска.".
Adjusting the default_charset had no effect. Not even fiddling with mb_internal_encoding could fix it, simply because the strings involved had *different* encodings and without actually changing one of them they just weren't going to match.
Either re-save the source file as KOI8-R to match the data file, or re-save the data file as UTF-8 to match the source code. Only then will the script properly echo '4'.The documentation is vague, on WHAT precisely the valid "NLS" language strings are that are valid for "mbstring.language".
According to http://php.net/manual/en/function.mb-language.php the values are "Japanese", "ja", "English", "en", or "uni" for UTF-8.
On the other hand, the sample on this current page omits "uni" but introduces "Neutral" as an undocumented option - which is also the default value:
<?php
var_dump( mb_language() ); // "neutral" (default if not set)
var_dump( mb_language( 'uni' ) ); // TRUE, valid language string
var_dump( mb_language() ); // "uni"
var_dump( mb_language( 'neutral' ) ); // TRUE, valid language string
var_dump( mb_language() ); // "neutral"
?>