it's kinda evil and gives you tons of headache.
Cette fonctionnalité est OBSOLÈTE à partir de PHP 7.2.0, et SUPPRIMÉE à partir de PHP 8.0.0. Dépendre de cette fonctionnalité est fortement déconseillé.
Vous pourriez trouver difficile de faire fonctionner une application PHP existante dans un environnement multioctets. Ceci est dû au fait que la plupart des applications PHP sont écrites avec des fonctions de chaînes de caractères standards comme la fonction substr(), qui est connue pour ne pas gérer proprement les chaînes multioctets.
Mbstring supporte aussi la surcharge de fonctions, pour permettre le support des chaînes multioctets sans modifier les scripts PHP. En utilisant ce système de surcharge de fonctions, certaines fonctions PHP seront remplacées par leur équivalent de mbstring. Par exemple mb_substr() remplacera substr(). Ce système de remplacement transparent, permet un portage simple et efficace des applications.
Pour utiliser la surcharge de fonctions, définissez
mbstring.func_overload
, dans le php.ini,
à une valeur positive qui représente une combinaison de masques d'octets
spécifiant les catégories de fonctions à surcharger. Il doit être défini à
1 pour surcharger la fonction mail(), 2 pour les
fonctions de chaînes, 4 pour les fonctions d'expression régulières.
Par exemple, avec la valeur 7, toutes les fonctions précédentes seront
surchargées. Voici la liste complète des fonctions surchargées, avec
leur fonction de remplacement.
Valeur de mbstring.func_overload | Fonction originale | Fonction de remplacement |
---|---|---|
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() |
Note:
Il n'est pas recommandé d'utiliser le remplacement des fonctions mbstring dans un contexte de
per-directory
, car il n'est pas confirmé encore qu'elles sont suffisamment stables dans un environnement de production et peuvent conduire à des résultats incohérents.
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.