CakeFest 2024: The Official CakePHP Conference

Configuración en tiempo de ejecución

El comportamiento de estas funciones se ve afectado por la configuración de php.ini.

Opciones de configuración de mbstring
Nombre Por defecto Cambiable Historial de cambios
mbstring.language "neutral" INI_ALL  
mbstring.detect_order NULL INI_ALL  
mbstring.http_input "pass" INI_ALL Obsoleta
mbstring.http_output "pass" INI_ALL Obsoleta
mbstring.internal_encoding NULL INI_ALL Obsoleta
mbstring.substitute_character NULL INI_ALL  
mbstring.func_overload "0" INI_SYSTEM Obsoleta desde PHP 7.2.0; eliminada desde 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 Disponible a partir de PHP 7.4.0.
mbstring.regex_stack_limit "100000" INI_ALL Disponible a partir de PHP 7.3.5.
Para más detalles y definiciones de los modos de INI_*, vea Dónde se puede realizar un ajuste de configuración.

He aquí una breve explicación de las directivas de configuración.

mbstring.language string

El ajuste de lenguaje nacional predeterminado (NLS) usado en mbstring. Se ha de observar que esta opción define automágicamente mbstring.internal_encoding, por lo que se debe colocar mbstring.internal_encoding tras mbstring.language en php.ini

mbstring.encoding_translation bool

Habilita el filtro de codificación de caracteres transparente para las consultas HTTP entrantes, la cual lleva a cabo la detección y la conversión de la codificación de entrada a la codificación de caracteres interna.

mbstring.internal_encoding string
Advertencia

Esta característica obsoleta será eliminada con certeza en el futuro.

Define la codificación de caracteres interna.

Los usuarios deberían dejarla vacía y establecer default_charset en su lugar.

mbstring.http_input string
Advertencia

Esta característica obsoleta será eliminada con certeza en el futuro.

Define la codificación de caracteres predeterminada de entrada de HTTP.

Los usuarios deberían dejarla vacía y establecer default_charset en su lugar.

mbstring.http_output string
Advertencia

Esta característica obsoleta será eliminada con certeza en el futuro.

Define la codificación de caracteres predeterminada de salida de HTTP (la salida será convertida de la codificación interna a la codificación de salida de HTTP).

Los usuarios deberían dejarla vacía y establecer default_charset en su lugar.

mbstring.detect_order string

Define el orden de detección de códigos de caracteres predeterminado. Véase también mb_detect_order().

mbstring.substitute_character string

Define el caracter de sustitución para juegos de caracteres inválidos. Véase también mb_substitute_character() para valores compatibles.

mbstring.func_overload string
Advertencia

This feature has been DEPRECATED as of PHP 7.2.0, and REMOVED as of PHP 8.0.0. Relying on this feature is highly discouraged.

Reemplaza determinadas funciones de único byte por sus equivalentes en mbstring. Véase la sección Sobrecarga de funciones para más información.

Este ajuste sólo puede ser cambiado en el fichero php.ini

mbstring.http_output_conv_mimetypes string

mbstring.strict_detection bool

Habilita la detección estricta de codificaciones. Consulte mb_detect_encoding() para obtener una descripción y ejemplos.

mbstring.regex_retry_limit int

Limits the amount of backtracking that may be performed during one mbregex match.

This setting only takes effect when linking against oniguruma >= 6.8.0.

mbstring.regex_stack_limit int

Limits the stack depth of mbstring regular expressions.

De acuerdo a la » especificación de HTML 4.01, se permite que los navegadores envíen un formulario con una codificación diferente a la utilizada por la página. Véase mb_http_input() para consultar los juegos de caracteres utilizados por los navegadores.

Pese a que la mayoría de navegadores son capaces de averiguar la codificación de un determinado documento HTML, es aconsejable utilizar el parámetro charset en la cabecera Content-Type de HTTP con un valor apropiado, mediante header() o mediante el ajuste ini default_charset.

Ejemplo #1 Ejemplos de ajustes de php.ini

; Establecer el lenguaje predeterminado
mbstring.language        = Neutral; Establecer el lenguaje neutral(UTF-8) (predeterminado)
mbstring.language        = English; Establecer como lenguaje el inglés
mbstring.language        = Japanese; Establecer como lenguaje el japonés

;; Establecer la codificación interna predeterminada
;; Nota: Asegúrese de usar una codificación que funcione con PHP
mbstring.internal_encoding    = UTF-8  ; Establecer la codificación interna a UTF-8

;; Traducción de codificación HTTP entrante habilitada
mbstring.encoding_translation = On

;; Establecer la codificación de caracteres predeterminada de HTTP entrante
;; Nota: Un script no podrá cambiar el ajuste http_input.
mbstring.http_input           = pass    ; Sin conversión.
mbstring.http_input           = auto    ; Establecer la entrada HTTP en automático
                                ; "auto" se expande de acuerdo a mbstring.language
mbstring.http_input           = SJIS    ; Establecer la entrada HTTP a SJIS
mbstring.http_input           = UTF-8,SJIS,EUC-JP ; Especificar el orden

;; Establecer la codificación de caracteres predeterminada de HTTP saliente
mbstring.http_output          = pass    ; Sin conversión
mbstring.http_output          = UTF-8   ; Establecer la codificación de salida HTTP a UTF-8

;; Establecer el orden predeterminado de la detección de juegos de caracteres
mbstring.detect_order         = auto    ; Orden de detección automático
mbstring.detect_order         = ASCII,JIS,UTF-8,SJIS,EUC-JP ; Especificar el orden

;; Establecer el carácter de sustitución predeterminado
mbstring.substitute_character = 12307   ; Especificar un valor Unicode
mbstring.substitute_character = none    ; No imprimir el carácter
mbstring.substitute_character = long    ; Ejemplo de long: U+3000,JIS+7E7E

Ejemplo #2 Ajustes de php.ini para usuarios de EUC-JP

;; Deshabilitar el almacenamiento en el búfer de salida
output_buffering      = Off

;; Establecer el juego de caracteres de las cabeceras HTTP
default_charset       = EUC-JP

;; Establecer como lenguaje predeterminado el japonés
mbstring.language = Japanese

;; Habilitar la traducción de la codificación del HTTP entrante.
mbstring.encoding_translation = On

;; Establecer en automática la conversión de la codificación de HTTP entrante
mbstring.http_input   = auto

;; Convertir la salida de HTTP a EUC-JP
mbstring.http_output  = EUC-JP

;; Establecer EUC-JP como codificación interna
mbstring.internal_encoding = EUC-JP

;; No imprimir caracteres inválidos
mbstring.substitute_character = none

Ejemplo #3 Ajustes de php.ini para usuarios de SJIS

;; Habilitar el almacenamiento en el búfer de salida
output_buffering     = On

;; Establecer mb_output_handler para habilitar la conversión de los datos de salida
output_handler       = mb_output_handler

;; Establecer el juego de caracteres de las cabeceras HTTP
default_charset      = Shift_JIS

;; Establecer como lenguaje predeterminado el japonés
mbstring.language = Japanese

;; Establecer en automático la conversión del juego de caracteres http entrante
mbstring.http_input  = auto

;; Convertir a SJIS
mbstring.http_output = SJIS

;; Establecer EUC-JP como codificación interna
mbstring.internal_encoding = EUC-JP

;; No imprimir caracteres inválidos
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