Bu preg_replace_callback PHP ne yapar?

3 Cevap php

Ben şu yapan bir b2evo PHP sitesinde kod bölüm var:

$content = preg_replace_callback(
    '/[\x80-\xff]/',
    create_function( '$j', 'return "&#".ord($j[0]).";";' ),
    $content);

Bu kod bölümü ne yapar? Benim tahminim 128 ve 256 arasında ASCII karakterleri çıkarır, ama emin olamaz olmasıdır.

Bu haliyle de, her zaman bu kod bit bir sayfa içinde denir, PHP ayırır ve daha sonra bellek 2K kadar özgür değil. Fonksiyonu bir sayfa (bu olabilir) 1000 + kere aradım, o sayfa bellek fazladan 2MB kullanır.

Bu benim web uygulaması ile sorunlara neden oluyor. Neden hafıza kaybı yaşıyorum ve nasıl ben bu yüzden bir bellek sızıntısı alamadım yeniden mi?

3 Cevap

Gerçekten sıyırma değil, onların kuruluşlar ile yüksek ASCII karakterleri değiştirir.

See preg_replace_callback.
create_function is used to make an anonymous function, but you can use a plain function instead:

$content = 'Çà ! Nœm dé fîçhïèr tôrdù, @ pöür têstër... ? ~ Œ[€]';
$content = preg_replace_callback('/[\x80-\xff]/', 'CB_CharToEntity', $content);
echo $econtent . '<br>';
echo htmlspecialchars($content) . '<br>';
echo htmlentities($content) . '<br>';
echo htmlentities($content, ENT_NOQUOTES, 'cp1252') . '<br>';

function CB_CharToEntity($matches)
{
    return '&#' . ord($matches[0]) . ';';
}

[EDIT] işi yapmak için bir temizleyici, muhtemelen hızlı bir yol bulundu! ^ _ ^ Sadece ihtiyaçlarınızı uygun seçenekleri ile htmlentitiesi kullanın.

Bu create_function bu senin bellek sızdırıyor oluyor - sadece yerine normal işlevini kullanmak ve iyi olacak.

Kendisi işlevi sayısal HTML kuruluşlar ile karakterleri yerini almaktadır (&#xxx;)

Bu preg_replace sizin durumunuzda /e bayrağı ile kullanmak çok basittir:

$content = preg_replace(
    '/[\x80-\xff]/e',
    '"&#".ord($0).";"',
    $content);