我試圖編寫腳本來解析遠程RSS提要,並以JSON格式輸出結果。PHP - 處理缺少分號的HTML實體
原始RSS提要包含HTML實體,如–
,…
等。
我的原始內容使用html_entity_decode
第一,使json_encode
會產生正確的輸出:
$rss = new DOMDocument();
$rss->load('https://www.example.com/feed');
$feed = array();
foreach ($rss->getElementsByTagName('item') as $node) {
$item = array (
'title' => html_entity_decode($node->getElementsByTagName('title')->item(0)->nodeValue,ENT_COMPAT,'UTF-8'),
'desc' => html_entity_decode($node->getElementsByTagName('description')->item(0)->nodeValue,ENT_COMPAT,'UTF-8'),
'link' => $node->getElementsByTagName('link')->item(0)->nodeValue,
'date' => $node->getElementsByTagName('pubDate')->item(0)->nodeValue,
);
$feed[] = $item;
}
$data = array();
foreach($feed as $item){
$data[] = array('url'=>$item['link'],'date'=>date('l, F d, Y g:i A',strtotime($item['date'])),'title'=>$item['title'],'desc'=>$item['desc']);
}
echo json_encode($data);
它運作良好,除了一些的HTML實體是缺少分號。 html_entity_decode
將不會識別它們。
我在想,也許我可以使用正則表達式來查找和修復那些沒有分號的實體。但我不知道如何編寫這樣的代碼。任何想法?
或者還有其他方法可以解決這個問題嗎?
一些樣本將幫助! –
到目前爲止,我看到'–'和'…'。有時他們有分號。有時候不是。 – Shawn