CakeFest 2024: The Official CakePHP Conference

Configurações em Execução

O comportamento destas funções é afetado pelas configurações do php.ini.

Opções de configuração do mbstring
Nome Padrão Modificável Registro de Alterações
mbstring.language "neutral" INI_ALL  
mbstring.detect_order NULL INI_ALL  
mbstring.http_input "pass" INI_ALL Descontinuado
mbstring.http_output "pass" INI_ALL Descontinuado
mbstring.internal_encoding NULL INI_ALL Descontinuado
mbstring.substitute_character NULL INI_ALL  
mbstring.func_overload "0" INI_SYSTEM Descontinuado a partir do PHP 7.2.0; removido a partir do 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 Disponível a partir do PHP 7.4.0.
mbstring.regex_stack_limit "100000" INI_ALL Disponível a partir do PHP 7.3.5.
Para mais detalhes e definições dos modos INI_*, consulte os Onde uma configuração deve ser definida.

Aqui está uma breve explicação das diretivas de configuração.

mbstring.language string

A configuração padrão do idioma nacional (NLS) usada no mbstring. Note que esta opção define automaticamente mbstring.internal_encoding e mbstring.internal_encoding deve ser colocada após mbstring.language no php.ini

mbstring.encoding_translation bool

Ativa o filtro de codificação de caracteres transparente para as consultas HTTP de entrada, que realiza a detecção e conversão da codificação de entrada para a codificação de caracteres interna.

mbstring.internal_encoding string
Aviso

Este recurso defasado certamente será removido no futuro.

Define a codificação de caracteres interna padrão.

Os usuários devem deixar isso vazio e definir default_charset em vez disso.

mbstring.http_input string
Aviso

Este recurso defasado certamente será removido no futuro.

Define a codificação de caracteres de entrada HTTP padrão.

Os usuários devem deixar isso vazio e definir default_charset em vez disso.

mbstring.http_output string
Aviso

Este recurso defasado certamente será removido no futuro.

Define a codificação de caracteres de saída HTTP padrão (a saída será convertida da codificação interna para a codificação de saída HTTP na saída).

Os usuários devem deixar isso vazio e definir default_charset em vez disso.

mbstring.detect_order string

Define a ordem padrão de detecção de código de caracteres. Veja também mb_detect_order().

mbstring.substitute_character string

Define o caractere a ser substituído por codificação de caracteres inválida. Veja mb_substitute_character() para os valores suportados.

mbstring.func_overload string
Aviso

Este recurso tornou-se DEFASADO a partir do PHP 7.2.0 e foi REMOVIDO a partir do PHP 8.0.0. O uso deste recurso é fortemente desencorajado.

Sobrecarrega um conjunto de funções de byte único pelas contrapartes do mbstring. Veja Sobrecarga de Funções para mais informações.

Esta configuração só pode ser alterada no arquivo php.ini.

mbstring.http_output_conv_mimetypes string

mbstring.strict_detection bool

Ativa a detecção estrita de codificação. Veja mb_detect_encoding() para uma descrição e exemplos.

mbstring.regex_retry_limit int

Limita a quantidade de retrocesso que pode ser executada durante uma correspondência de mbregex.

Esta configuração só tem efeito ao vincular contra oniguruma >= 6.8.0.

mbstring.regex_stack_limit int

Limita a profundidade da pilha de expressões regulares mbstring.

De acordo com a » especificação HTML 4.01, os navegadores da web podem codificar um formulário sendo enviado com uma codificação de caracteres diferente da usada para a página. Veja mb_http_input() para detectar a codificação de caracteres usada pelos navegadores.

Embora os navegadores populares sejam capazes de fazer uma suposição razoavelmente precisa sobre a codificação de caracteres de um documento HTML específico, seria melhor definir o parâmetro charset no cabeçalho HTTP Content-Type para o valor apropriado usando a função header() ou a configuração ini default_charset.

Exemplo #1 Exemplos de configuração do 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

Exemplo #2 php.ini configuração para usuários EUC-JP

;; 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

Exemplo #3 php.ini configuração para usuários SJIS

;; 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

add a note

User Contributed Notes 3 notes

up
0
Hayley Watson
5 years ago
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'.
up
-1
ASchmidt at Anamera dot net
5 years ago
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"
?>
up
-7
PRETTYGIRL NOT COMe
10 years ago
Note that you should better at least set "mbstring.internal_encoding".

Just check as below:

<?php

echo mb_internal_encoding() . '<br />';
echo
mb_regex_encoding();

?>

You might be surprised at unexpected values.

eg.

mbstring.language Japanese
;mbstring.internal_encoding (commented out showing "no value" in phpinfo() )

These two lines in "php.ini" are the same values as

mb_internal_encoding("EUC-JP");
mb_regex_encoding("EUC-JP");

in Win / Linux servers.

"mbstring.internal_encoding" defines the default encoding for "mb_" Functions such as "mb_strlen()".

It also defines the same for "mb_ereg_" Functions such as "mb_ereg()" when you don't set "mb_regex_encoding".
To Top