PHP: Htmlentities ile kullanırken preg_replace

2 Cevap php

Ben JSON çözümleyici bir RSS yazıyorum ve bunun bir parçası olarak, ben açıklama etiketi içinde bulunan herhangi bir etiketi htmlentitiesi () kullanmanız gerekir. Şu anda, preg_replace () kullanmaya çalışıyorum, ama ben onunla biraz mücadele ediyorum. Benim geçerli (non-işçi) kodu gibi görünüyor:

$pattern[0] = "/\<description\>(.*?)\<\/description\>/is";
$replace[0] = '<description>'.htmlentities("$1").'</description>';
$rawFeed = preg_replace($pattern, $replace, $rawFeed);

Siz de bu daha zarif bir çözüm varsa, lütfen paylaşın. Teşekkürler.

2 Cevap

Basit. Kullan preg_replace_callback:

function _handle_match($match)
{
    return '<description>' . htmlentities($match[1]) . '</description>';
}

$pattern = "/\<description\>(.*?)\<\/description\>/is";
$rawFeed = preg_replace_callback($pattern, '_handle_match', $rawFeed);

Herhangi bir arama türünü kabul, bu yüzden de sınıfları yöntemleri.

Daha zarif bir çözüm istihdam olacaktır SimpleXML. Ya da XML_Feed_Parser veya Zend_Feed besleme ayrıştırmak gibi bir üçüncü taraf kitaplığı.

Burada bir SimpleXML örnek:

<?php
$rss = file_get_contents('http://rss.slashdot.org/Slashdot/slashdot');
$xml = simplexml_load_string($rss);

foreach ($xml->item as $item) {
    echo "{$item->description}\n\n";
}
?>

Ben yukarıda belirtilen kütüphanelerinden birine istihdam mantıklı neden olan, RSS ve RDF ve Atom farklı görünebilir unutmayın.