サポート » 使い方全般 » RSSの記事概要(description)で文字参照が途中で切れることによりパースエラー

  • PHP初心者です。

    RSS内に記事の概要(先頭の120文字)が挿入される部分があり、120文字目がちょうど文字参照&#xxxx;の途中だった場合、文字参照が途中で切れて&#xxのようになることで生成されるRSSがパースエラーとなり、一部のRSSリーダーやRSSを用いたサービス(FeedBurnerなど)が読み取ってくれなくなるという不具合が生じました。

    以下、私はRSSとしてRDFを用いているのでRDFについて説明させていただきます。

    RDFはwp-includes/feed-rdf.phpによって生成されています。descriptionを生成しているのはファイルの下から数行目にある<description><?php the_excerpt_rss(); ?></description>の部分です。

    私の場合、RSSは全文配信にしているため、実際のところ記事概要がRSSリーダー等で使われることはあまりありません。ですので、記事概要からstr_replace("&","",記事概要);&を取り除いてあげることで解決しようと考えました。

    the_excerpt関数に関しては、PHPで使える値を返してくれるget_the_excerpt関数というものが用意されていますが、get_the_excerpt_rss関数が用意されていませんでした。

    そこで、Adam R BrownさんのSource View: the_excerpt_rssを見てみたところ、the_excerpt_rss関数は次のようになっていました。

    ※補足:Adam R BrownさんのSource ViewはWordPressの関数が定義されているところを調べられるものだと思って利用したのですが、Hookが定義されているところを調べられるものでしたっけ?

    166  	 /**
    167 	  * Display the post excerpt for the feed.
    168 	  *
    169 	  * @package WordPress
    170 	  * @subpackage Feed
    171 	  * @since 0.71
    172 	  * @uses apply_filters() Calls 'the_excerpt_rss' hook on the excerpt.
    173 	  */
    174 	 function the_excerpt_rss() {
    175 	      $output = get_the_excerpt();
    176 	      echo apply_filters('the_excerpt_rss', $output);
    177 	 }

    これは、get_the_excerpt()で得た値をそのまま表示しているということなのでしょうか?良く分からなかったのですが、そこで次のように書いたところ、&#xx#xxに変わり、パースエラーがなくなりました。

    <description><?php echo str_replace("&","",get_the_excerpt()); ?></description>

    以上の作業に関して、問題点等あればご指摘していただけると嬉しいです。
    よろしくお願いします。

1件の返信を表示中 - 1 - 1件目 (全1件中)
  • モデレーター IKEDA Yuriko

    (@lilyfan)

    これは、get_the_excerpt()で得た値をそのまま表示しているということなのでしょうか?

    そのままではなくて、 the_excerpt_rss フィルターを通して出力しているということです。ここで出力の整形をやっているため、このフィルターを通した方がいいでしょう。

    また、&#xx& だけを取る処理は、正当な &#xxx; にも悪影響が出るので危険です。したがって、末尾の ‘&#xx;` が抜けている場合のみ削除した方がよいです。

    <?php
    $excerpt = get_the_excerpt();
    $excerpt = preg_replace('/&#[^;]*$/', '', $excerpt);
    ?>
    <description><?php echo apply_filters('the_excerpt_rss', $excerpt )?></description>
1件の返信を表示中 - 1 - 1件目 (全1件中)
  • トピック「RSSの記事概要(description)で文字参照が途中で切れることによりパースエラー」には新たに返信することはできません。