it's kinda evil and gives you tons of headache.
Quizás resulte complicado obtener una aplicación de PHP que funcione en un determinado entorno multibyte. Esto sucede porque la mayor parte de las aplicaciones de PHP están escritas con las funciones estándar de cadenas de caracteres, como por ejemplo substr(), la cual se sabe que no maneja correctamente los strings codificados de forma multibyte.
mbstring admite la 'sobrecarga de funciones', característica que permite que tales aplicaciones consideren los multibyes sin necesidad de modificar el código, sobrecargando las funciones homólogas multibyes sobre las estándar de cadenas de caracteres. Por ejemplo, se invocaría a mb_substr() en lugar de a substr() si se habilitara la sobrecarga de funciones. En muchos casos, esta funcionalidad simplifica la portabilidad de las aplicaciones que tan solo admiten codificaciones de un único byte a entornos multibyte.
Para utilizar la sobrecarga de funciones, se ha de establecer
mbstring.func_overload
en php.ini a un
valor positivo que represente una combinación de máscaras de bits que especifiquen
las categorías de las funciones que se sobrecargarán. Para sobrecargar
la función mail() debe etablecerse a 1. Para funciones
de string, a 2. Para funciones de expresiones regulares, a 4. Por ejemplo,
si se estableciera a 7, se sobrecargaría las funciones de mail, de string, y de
expresiones regulares. A continuación se muestra la lista de funciones sobrecargadas.
valor de mbstring.func_overload | función original | función sobrecargada |
---|---|---|
1 | mail() | mb_send_mail() |
2 | strlen() | mb_strlen() |
2 | strpos() | mb_strpos() |
2 | strrpos() | mb_strrpos() |
2 | substr() | mb_substr() |
2 | strtolower() | mb_strtolower() |
2 | strtoupper() | mb_strtoupper() |
2 | stripos() | mb_stripos() |
2 | strripos() | mb_strripos() |
2 | strstr() | mb_strstr() |
2 | stristr() | mb_stristr() |
2 | strrchr() | mb_strrchr() |
2 | substr_count() | mb_substr_count() |
4 | ereg() | mb_ereg() |
4 | eregi() | mb_eregi() |
4 | ereg_replace() | mb_ereg_replace() |
4 | eregi_replace() | mb_eregi_replace() |
4 | split() | mb_split() |
Nota:
No se recomienda habilitar la sobrecarga de funciones en un contexto de directorios, ya que todavía no se ha confirmado que su uso sea suficientemente estable en un entorno de producción, lo que podría conducir a comportamientos inesperados.
I took over a project with this "feature" enabled... took me a while to figure out why strings behaved non language standard. So, if you like to make grown men cry - by all means enable this deathtrap.
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
In case you need to (de)activate the overloading for a specific directory, try setting an appropriate php_admin_value in your httpd.conf, e.g.
<Directory ...>
...
php_admin_value mbstring.func_overload 7
</Directory>
I'm not 100% sure if one can rely on that, but it seems to work for me.