Utilitaires
Scripts
Divers
Jeux
Rechercher
Quillevere.net
Réflexions informatiques

Contourner la lenteur de mb_substr sous PHP7

15/04/2019

Les fonctions PHP travaillant sur des chaînes en multi-octets telles que mb_substr, mb_strlen sont beaucoup plus lentes en PHP7, comme certains ont pu le constater. Dans le cas d'une boucle, le ralentissement est clairement visible.

Une astuce consiste à repasser en ISO-8859-1, via utf8_decode, puis à utiliser les fonctions équivalentes, et à remettre l'UTF8 en fin de traitement via utf8_encode. Exemple :

$iTaille=mb_strlen($sUTF8);
$sFin='';
for ($i=0; $i<$iTaille; $i++){
   $sFin.=mb_substr($sUTF8, $i, 1);}

Deviendra :

$sISO=utf8_decode($sUTF8);
$iTaille=strlen($sISO);
$sFin='';
for ($i=0; $i<$iTaille; $i++) {
   $sFin.=substr($sISO, $i, 1); }
$sFin=utf8_encode($sISO);

L'inconvénient de cette astuce est que certains caractères, comme le signe euro, n'ont pas d'équivalence en ISO-8859-1. Il est possible toutefois de les remplacer par leurs entités HTML (&euro; par exemple) avant le décodage UTF-8.

Dernière modification le 18/04/2019 - Quillevere.net

Rechercher sur le site

rss RSS info Informations