PHP

PHP file_get_content で Feed(RSS)が取得できなくなった件

SSL/TLS化したサイトのFeed(RSS)が取得できない&文字化け

SSL/TLS化したサイトで運用しているWordPressのFeed(RSS)がPHPで取得できない。

取得できたとしても文字化けして、見たこともなく何語かも分からない文字列が表示される場合の対処法。

//証明書エラーは無視
$options = stream_context_create(array('ssl' => array(
    'verify_peer' => false,
    'verify_peer_name' => false
)));
$feed = file_get_contents('https://hogehoge.com/feed', false, $options);

// XMLで不正文字と扱われる対象を空文字に変換
$invalid_characters = '/[^\x9\xa\x20-\xD7FF\xE000-\xFFFD]/';
$feed = preg_replace($invalid_characters, '', $feed);

//ここまでやっておけば、あとは以下で吐き出すだけ
$rss = simplexml_load_string($feed);
$array = array();
foreach ($rss->channel->item as $item) {
    $array[] = array('title'=>$item -> title,'url' => $item -> link,'date' => strtotime($item -> pubDate));
    $date = date('Y/m/d', strtotime($item->pubDate));
    echo '<a href="'.$item->link.'"><span>'.$date.'</span>'.$item->title.'</a>';
}

 

ブログランキング・にほんブログ村へ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です