リモートRSSフィードを解析し、その結果をJSON形式で出力するスクリプトを作成しようとしています。PHP - セミコロンがないHTMLエンティティを扱う
生のRSSフィードには–
、…
などのHTMLエンティティが含まれています。
json_encode
が正しい出力を生成するように、私は、最初の生の内容にhtml_entity_decode
を使用します。それは、セミコロンが欠落している一部 HTMLのentites以外うまく機能
$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_entity_decode
はそれらを認識しません。
おそらく正規表現を使ってセミコロンを使わずにこれらのエンティティを見つけて修正できると思っています。しかし、私はそのようなコードを書く方法を知らない。何か案が?
これに対処する方法はありますか?
いくつかのサンプルが役立つだろう! –
これまでのところ、私は '–'と '…'と表示されています。セミコロンがあることもあります。時々そうではない。 – Shawn