facebookのポストをrssで取得して出力しようとしたら、
タイトルの日本語が全部HTMLエンティティになってて、trimもなんにも上手くいかない。
なので、packしたり、html_entity_decode使ったりして変換しようとしたけれど、
どうにも言う事聞いてくれなくて、格闘した末うまくいったのでメモ。
// rss取得 // クラス include_once(ABSPATH.WPINC.'class-simplepie.php'); $rss = new SimplePie(); // feed url $rss->set_feed_url(array('あんなところ','こんなところ','のfeed url')); $rss->init(); $maxitems = $rss->get_item_quantity(3); // アイテム取得 $items = $rss->get_items(0,$maxitems); // 出力ループ foreach ($items as $item) : $title = $item->get_title(); // 数値参照文字っぽいものを含む場合だけ処理 // そうしないとまっとうなUTF-8タイトルまで破壊される if(preg_match('/&#x.{4};/',$title)){ // get_title()メソッドで&が全て&に変換されてしまってたのでもとに戻す $title = preg_replace('/&/','&',$title); $title = mb_convert_encoding($title,'UTF-8','HTML-ENTITIES'); } // こっから出力関係適当に ・・・・・ endforeach;
16進文字列取ってpackしてみたり、別のエンコード経由で変換してみたりと無駄なことをしていたことが判明。
ただし、エンティティと日本語の混合文字列だとどうなるか判らない模様。
コメント