Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

utiliser strlen a la place de mb_str len avec mbstring

6 réponses
Avatar
Thief13
Bonjour à tous

J'ai lu quelquepart qu'il était possible de faire en sorte d'utiliser
strlen à la place de mb_strlen avec mbstring (meme si ça bouffait un
peut les perf).

Malheureusement, je n'arrive pas à retrouver ou, ni comment...

Si quelqu'un a quelques pistes, je le remerci d'avance !

6 réponses

Avatar
Olivier Miakinen

J'ai lu quelquepart qu'il était possible de faire en sorte d'utiliser
strlen à la place de mb_strlen avec mbstring (meme si ça bouffait un
peut les perf).


Il faudrait que tu précises un peu ton besoin.

1) Si le charset est de type monobyte, par exemple US-ASCII ou
ISO-8859-1, alors mb_strlen($str) == strlen($str).

2) Si le charset est un multibyte constant, mettons 2 octets par
caractère, et que l'octet 0 n'intervient jamais en dehors du code
de fin de chaîne, alors mb_strlen($str) == strlen($str)/2.

3) Si le charset est un multibyte constant, mais que tu peux rencontrer
des octets à 0 un peu partout (par exemple pour les caractères ASCII),
alors il y a toutes les chances pour que strlen($str) retourne 0 ou 1
quelle que soit la longueur de la chaîne retournée par mb_strlen($str).

4) Si le charset est un multibyte variable, par exemple UTF-8, alors
tous les paris sont perdus d'avance (sauf si ta chaîne ne contient en
fait que de l'US-ASCII).

Bref... dis-nous quel charset tu utilises, et on te dira quel degré de
folie il faut avoir pour utiliser strlen() au lieu de mb_strlen().

Avatar
Thief13
4) Si le charset est un multibyte variable, par exemple UTF-8, alors
tous les paris sont perdus d'avance (sauf si ta chaîne ne contient en
fait que de l'US-ASCII).


C'est ça, mais j'ai lu que c'était possible de faire en sorte que php
fasse des alias des fonction mb en remplacement des fonctions normales,
meme si ça bouffais de la ressources

Avatar
Olivier Miakinen
4) Si le charset est un multibyte variable, par exemple UTF-8, alors
tous les paris sont perdus d'avance (sauf si ta chaîne ne contient en
fait que de l'US-ASCII).


C'est ça, mais j'ai lu que c'était possible de faire en sorte que php
fasse des alias des fonction mb en remplacement des fonctions normales,
meme si ça bouffais de la ressources


Tu veux dire un truc de ce genre là ?

-------------------------------------------------------------
undef(strlen)
function strlen($str) { return mb_strlen($str, "UTF_8"); }
-------------------------------------------------------------

Je ne crois pas que ce soit possible. À moins de recompiler toi-même
l'interpréteur PHP bien sûr.


Avatar
Thief13
4) Si le charset est un multibyte variable, par exemple UTF-8, alors
tous les paris sont perdus d'avance (sauf si ta chaîne ne contient en
fait que de l'US-ASCII).
C'est ça, mais j'ai lu que c'était possible de faire en sorte que php

fasse des alias des fonction mb en remplacement des fonctions normales,
meme si ça bouffais de la ressources


Tu veux dire un truc de ce genre là ?

-------------------------------------------------------------
undef(strlen)
function strlen($str) { return mb_strlen($str, "UTF_8"); }
-------------------------------------------------------------

Je ne crois pas que ce soit possible. À moins de recompiler toi-même
l'interpréteur PHP bien sûr.


Je ne sais pas... je vais essayer de retrouver le site sur lequel j'ai
vu ça et je reviendrai ici



Avatar
Philippe Le Van
J'ai lu quelquepart qu'il était possible de faire en sorte d'utiliser
strlen à la place de mb_strlen avec mbstring (meme si ça bouffait un
peut les perf).


Bonjour,

dans ta conf apache, tu peux ajouter (ou le changer dans ton php.ini).
php_value mbstring.func_overload 7

et pour les explications :
http://fr3.php.net/manual/fr/ref.mbstring.php#mbstring.overload

A+, Philippe
--
http://www.kitpages.fr

Avatar
Thief13

et pour les explications :
http://fr3.php.net/manual/fr/ref.mbstring.php#mbstring.overload



Parfait ! c'est EXACTEMENT ce que je cherchais, merci beaucoup !