サポート » バグ報告と提案 » サイト内検索時のRSSフィードのURL出力について

  • 解決済 hadacchi

    (@hadacchi)


    ※本フォーラムではアンパーサンドが実体文字参照へ変換されてしまうため,全角文字にて記載しています.
    wordpressのURL出力の多くは,各種XHTMLのstandardへ準拠し,URL内で「&」を「&」と実体文字参照により出力してくれますが,
    サイト内検索時 (http://url/wordpress/?s=hogehoge) のmetaタグ内でlinkタグによって配信される,
    当該検索結果のRSSフィードが,本来はhttp://hadacchi.com/wp_blog/?s=search&feed=rss2 と
    出力されるべきところ,http://hadacchi.com/wp_blog/?s=search&feed=rss2 と出力されてしまうため,
    MIME-type を application/xhtml+xml として出力した場合,パースエラーが生じます.

    query の処理が,本処理のみならず管理画面でのコメントログの検索においても用いられているため,
    function.php 内の build_query 関数の修正では管理画面に支障を来したため,
    暫定対処として link-templete.php 内の呼び出し元 (get_search_link, get_search_feed_link) で置換処理を行なっています.
    (参考:WordPressでMIME-TYPEをapplication/xhtml+xmlとする)

    抜本的な解決を要望します.

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • バグとして本家に報告したほうが良いでしょうね。

    790行あたりの
    $link = add_query_arg('feed', $feed, $link);
    の下あたりに追加ですかね。

    暫定対策としては、コアを書き換えなくても対応可能(フィルターを使う)です。

    add_filter('search_feed_link','amp_replace');
    function amp_replace($link) {
        $link = str_replace('&','&',$link);
        $link = str_replace('&','&',$link);
        return $link;
    }

    フォーラムのレスだとアンパサンドが消えちゃうので、
    str_replaceの部分は、
    (参考:WordPressでMIME-TYPEをapplication/xhtml+xmlとする)
    からコピーしてください。

    よりスマートな解決策のご紹介,ありがとうございました.
    本家にも投稿をして参りましたので,ご報告し,こちらはcloseさせていただきます.
    http://wordpress.org/support/topic/xml-parse-error-in-rss-feed-url?replies=1

    不慣れな英語のため,誤訳等がございましたら,日本語での内容を把握されておられる方からのフォローを期待しています.

    さて,与太話ですが…
    思い付きで試しましたところ,’amp;’ を3回連続で ‘&’ の後ろに書けば,次のように出力されることが分かりました.

    &

    きっと,2回変換フィルタを通しているのだろうなぁと想像できますね.
    editする度に改めて,’amp;’ を3回追記しなければならないことから,不可逆に文字実体参照を除去しているのだろうと思うところです.

    本家フォーラムの中で,パッチを作ってもらいましたので,報告いたします.
    http://core.trac.wordpress.org/ticket/17408

    2011/5/13 23:00時点のパッチで,特に問題なく動作しています.

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「サイト内検索時のRSSフィードのURL出力について」には新たに返信することはできません。