Preg_replace ile bellek sızıntısı

2 Cevap php

Ben bir dize aksan yerine preg_replace fonksiyonunu kullanarak ediyorum, UTF-8 ile çalışıyorum.

Ben bir bellek sızıntısı gibi görünüyor ne katlanılan, ama ben kök nedeni izole edemez, benim kod oldukça basittir:

    preg_replace(
        array_keys($aToNoAccents),
        array_values($aToNoAccents),
        $sText
    );

where $aToNoAccents is an associative array with entries like '~[Ą]~u' => 'A', '~[Ć]~u' => 'C',. My script prints this error for the above line:

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 3039 bytes)

Açıkçası PHP, (1Gb ayak izi kapalı şekilde uygulama ölçek) için izin verilen bellek artan meselesi değil. Ayrıca, bu hat sorunsuz binlerce kez idam ama, sadece yeniden zor bazı durumlarda, bu hatayı verir.

Is anyone aware of memory problems with preg_replace and UTF-8 strings? Am I to use special care in passing actual parameters to such function?

Ben Suhosin-Patch ile PHP 5.2.6-3 kullanıyorum

2 Cevap

Eğer iconv yerine yedek haritayı handcrafting denediniz mi?

PHP kılavuzundan örnek uyarlanması

$text = "A String with lots of weird chars, like ĄĆ";

echo 'Original : ', $text, PHP_EOL;
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL;
echo 'IGNORE   : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL;
echo 'Plain    : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL;

doğuracak

Original : A String with lots of weird chars, like AC
TRANSLIT : A String with lots of weird chars, like AC
IGNORE   : A String with lots of weird chars, like AC
Plain    : A String with lots of weird chars, like AC

Ama bu mutlaka bunu istediğiniz tuşları ile bir deneyin içeri atmak herhangi bir karakter ile çalışacak değildir.

i ile preg_replace (bellek sızıntısı) aynı sorun yoktu ve ben php 5.2 muhtemelen onun bir hata "duydum"

Ben emin değilim ama php ile aynı komut çalışırsanız 5.0 çalışabilir.

Sadece kayıt için.