In response to mortoray at ecircle-ag dot com:
The characters display fine as long as you set the Encoding to something more "Latin 1" compatible (i.e. US-ACSII, ISO-8859-1, ISO-8859-1, or Windows 1252). PHP.net auto-detects to UTF-8
mb_internal_encoding
(PHP 4 >= 4.0.6, PHP 5)
mb_internal_encoding — Establece/obtiene la codificación de caracteres interna
Descripción
Establece/obtiene la codificación de caracteres interna.
Parámetros
-
encoding -
encodinges el nombre de la codificación de caracteres usada para la conversión de la codificación de caracteres de entrada HTTP, la conversión de la codificación de caracteres de salida HTTP , y la codificación de caracteres predeterminada para funciones de cadenas de caracteres definidas por el módulo mbstring. DeberÃa observarse que la codificación interna es totalmente diferente de la de la expresión regular multibyte.
Valores devueltos
Si se establece encoding, entonces
Devuelve TRUE en caso de éxito o FALSE en caso de error.
En este caso, la codificación de caracteres para expresiones regulares multibyte NO se cambia.
Si se omite encoding, entonces
devolverá el nombre de la codificación de caracteres en uso.
Ejemplos
Ejemplo #1 Ejemplo de mb_internal_encoding()
<?php
/* Establecer la codificación de caracteres interna a UTF-8 */
mb_internal_encoding("UTF-8");
/* Mostrar la codificación de caracteres interna en uso */
echo mb_internal_encoding();
?>
Ver también
- mb_http_input() - Detecta la codificación de caracteres de entrada HTTP
- mb_http_output() - Establece/obtiene la codificación de caracteres de salida HTTP
- mb_detect_order() - Establece/obtiene el orden de detección de codificaciones de caracteres
- mb_regex_encoding() - Establece/obtiene la codificación de caracteres para expresiones regulares multibyte
Be aware that the strings in your source files must match the encoding you specify by mb_internal_encoding. It appears the Parser loads raw bytes from the file and refers to its internal encoding to determine their actual encoding.
To demonstrate, the following outputs as espected when the /source/ file is Latin-1 encoded:
<?php
mb_internal_encoding("iso-8859-1");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "üöä<br/>";
?>üöä
Now, a typical use of mb_internal_encoding is shown as follows. Make the change to "utf-8" but leave the /source/ file encoding unchanged:
<?php
mb_internal_encoding("UTF-8");
mb_http_output( "UTF-8" );
ob_start("mb_output_handler");
echo "üöä<br/>";
?>üöä
The output will just show the <br/> tag and no text.
Save the file as UTF-8 encoding and then the results will be as expected.
i noticed that setting mb_internal_encoding('UTF-8') in my global site config.inc.php, doesn't work in my classes : it reverse back to ISO-8859-1.
Adding the call to the constructor of my top site class resolve this.
Especially when writing PHP scripts for use on different servers, it is a very good idea to explicitly set the internal encoding somewhere on top of every document served, e.g.
mb_internal_encoding("UTF-8");
This, in combination with mysql-statement "SET NAMES 'utf8'", will save a lot of debugging trouble.
Also, use the multi-byte string functions instead of the ones you may be used to, e.g. mb_strlen() instead of strlen(), etc.
To previous example, the PHP notes don't appear to support umlauted characters so there are question marks (?) there instead of what should be umlauated oue. Just substitute any high-order/accented character to see the effect.
