PHP Conference Nagoya 2025

Sobrecarga de Funciones

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.

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.

add a note

User Contributed Notes 4 notes

up
52
Anonymous
8 years ago
it's kinda evil and gives you tons of headache.
up
39
Anonymous
7 years ago
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.
up
17
Grandt
10 years ago
In short, only use mbstring.func_overload if you are 100% certain that nothing on your site relies on manipulating binary data in PHP.
up
-2
Oliver Baltz
14 years ago
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.
To Top