J'utilise la fonction preg_replace
pour remplacer les accents dans une chaîne, je travaille avec UTF-8.Mémoire fuite avec preg_replace
J'ai engagés dans ce qui semble être une fuite de mémoire, mais je ne peux pas isoler la cause racine, mon code est assez simple:
preg_replace(
array_keys($aToNoAccents),
array_values($aToNoAccents),
$sText
);
où $aToNoAccents
est un tableau associatif avec des entrées comme '~[Ą]~u' => 'A', '~[Ć]~u' => 'C',
. Mes impressions script cette erreur pour la ligne ci-dessus:
Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 3039 bytes)
Il est évident que ce n'est pas une question de plus en plus la mémoire autorisée pour PHP, (une empreinte 1Go est loin l'échelle de ma demande). De plus, cette ligne est exécutée des milliers de fois sans problème mais, pour certains cas difficiles à reproduire, elle génère l'erreur.
Quelqu'un a-t-il connaissance de problèmes de mémoire avec les chaînes preg_replace et UTF-8? Est-ce que je dois utiliser un soin particulier pour transmettre les paramètres réels à une telle fonction?
J'utilise PHP 5.2.6-3 avec Suhosin-Patch
Ces expressions rationnelles sont-elles? Sinon, vous devriez probablement utiliser 'str_replace' à la place et voir si cela fonctionne mieux? –
Oui, peut-être que je n'ai pas besoin d'être regex après tout. Je fais un essai –