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'.Конфигурација во време на извршување
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Конфигурација во време на извршување
Референца за `mbstring.configuration.php` со подобрена типографија и навигација.
Конфигурација во време на извршување
Поведението на овие функции е под влијание на поставките во php.ini.
| Име | Стандардно | Променливо | Дневник на промени |
|---|---|---|---|
| mbstring.language | "неутрално" | INI_ALL |
|
| mbstring.detect_order | NULL | INI_ALL |
|
| mbstring.http_input | "помине" | INI_ALL |
Застарено |
| mbstring.http_output | "помине" | 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.languagestring -
Стандардната поставка за национален јазик (NLS) што се користи во mbstring. Забележете дека оваа опција автоматски дефинира
mbstring.internal_encodingandmbstring.internal_encodingтреба да се постави поmbstring.languagein php.ini -
mbstring.encoding_translationbool -
Овозможува транспарентен филтер за кодирање на карактери за дојдовните HTTP барања, кој врши детекција и конверзија на влезната кодировка во внатрешната кодировка на карактери.
-
mbstring.internal_encodingstring -
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
Оваа застарена функција will сигурно ќе биде removed во иднина.
Дефинира стандардна внатрешна кодировка на карактери.
Корисниците треба да го остават ова празно и да постават
default_charsetinstead. -
mbstring.http_inputstring -
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
Оваа застарена функција will сигурно ќе биде removed во иднина.
Дефинира стандардна влезна кодировка на HTTP карактери.
Корисниците треба да го остават ова празно и да постават
default_charsetinstead. -
mbstring.http_outputstring -
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
Оваа застарена функција will сигурно ќе биде removed во иднина.
Дефинира стандардна излезна кодировка на HTTP карактери (излезот ќе биде претворен од внатрешната кодировка во излезната кодировка на HTTP при излез).
Корисниците треба да го остават ова празно и да постават
default_charsetinstead. -
mbstring.detect_orderstring -
Дефинира стандарден редослед за детекција на код на карактери. Погледнете исто така mb_detect_order().
-
mbstring.substitute_characterstring -
Дефинира карактер за замена на неважечка кодировка на карактери. Погледнете mb_substitute_character() за поддржани вредности.
-
mbstring.func_overloadstring -
Ги ескејпува специјалните знаци во стринг за употреба во SQL изјава
Претходната порака за грешка DEPRECATED Оваа функција е REMOVED од PHP 7.2.0, и
Преоптоварува сет на еднобајтни функции со mbstring еквиваленти. Погледнете Преоптоварување на функции Користење на PHP од командната линија
Оваа поставка може да се промени само од php.ini file.
-
mbstring.http_output_conv_mimetypesstring -
-
mbstring.strict_detectionbool -
Овозможува строго откривање на кодирање. Погледнете mb_detect_encoding() за опис и примери.
-
mbstring.regex_retry_limitint -
Го ограничува количеството на враќање назад што може да се изврши за време на едно mbregex совпаѓање.
Оваа поставка стапува на сила само кога се поврзува со oniguruma >= 6.8.0.
-
mbstring.regex_stack_limitint -
Го ограничува длабочината на стекот на mbstring регуларни изрази.
Според » HTML 4.01 спецификацијата, прелистувачите имаат дозвола да кодираат форма што се поднесува со кодирање на знаци различно од она што се користи за страницата. Видете mb_http_input() за откривање на кодирањето на знаци што го користат прелистувачите.
Иако популарните прелистувачи се способни да дадат разумно точна претпоставка за кодирањето на знаци на даден HTML документ, би било подобро да се постави charset параметар во
Content-Type HTTP заглавието на соодветната вредност со
header() or
default_charset ini поставката.
Пример #1 php.ini поставување примери
; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
mbstring.language = Japanese; Set default language to Japanese
;; Set default internal encoding
;; Note: Make sure to use character encoding works with PHP
mbstring.internal_encoding = UTF-8 ; Set internal encoding to UTF-8
;; HTTP input encoding translation is enabled.
mbstring.encoding_translation = On
;; Set default HTTP input character encoding
;; Note: Script cannot change http_input setting.
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
; "auto" is expanded according to mbstring.language
mbstring.http_input = SJIS ; Set HTTP input to SJIS
mbstring.http_input = UTF-8,SJIS,EUC-JP ; Specify order
;; Set default HTTP output character encoding
mbstring.http_output = pass ; No conversion
mbstring.http_output = UTF-8 ; Set HTTP output encoding to UTF-8
;; Set default character encoding detection order
mbstring.detect_order = auto ; Set detect order to auto
mbstring.detect_order = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Specify order
;; Set default substitute character
mbstring.substitute_character = 12307 ; Specify Unicode value
mbstring.substitute_character = none ; Do not print character
mbstring.substitute_character = long ; Long Example: U+3000,JIS+7E7E
Пример #2 php.ini поставување за EUC-JP users
;; Disable Output Buffering output_buffering = Off ;; Set HTTP header charset default_charset = EUC-JP ;; Set default language to Japanese mbstring.language = Japanese ;; HTTP input encoding translation is enabled. mbstring.encoding_translation = On ;; Set HTTP input encoding conversion to auto mbstring.http_input = auto ;; Convert HTTP output to EUC-JP mbstring.http_output = EUC-JP ;; Set internal encoding to EUC-JP mbstring.internal_encoding = EUC-JP ;; Do not print invalid characters mbstring.substitute_character = none
Пример #3 php.ini поставување за SJIS users
;; Enable Output Buffering output_buffering = On ;; Set mb_output_handler to enable output conversion output_handler = mb_output_handler ;; Set HTTP header charset default_charset = Shift_JIS ;; Set default language to Japanese mbstring.language = Japanese ;; Set http input encoding conversion to auto mbstring.http_input = auto ;; Convert to SJIS mbstring.http_output = SJIS ;; Set internal encoding to EUC-JP mbstring.internal_encoding = EUC-JP ;; Do not print invalid characters mbstring.substitute_character = none
Белешки од корисници 2 забелешки
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"
?>