自作したRSSファイルがIEなどでエラーになる

このQ&Aのポイント
  • 自作したRSSファイルがIEなどでエラーになる問題について調査しました。
  • 出力したRSSファイルをIEで開くとセミコロンが必要というエラーが表示されます。
  • 問題の原因はURLに記述された特定の文字がエラーと関連している可能性があります。
回答を見る
  • ベストアンサー

自作したRSSファイルがIEなどでエラーになる

RSSを出力するCGIを自作で作ったのですが、 その出来上がったRSS(RDFファイル)を、IEで開くと セミコロン ( ; ) が必要です。 行: 7 文字: 76 ?<channel rdf:about="*ttp://**.******.***/***/index.ms?mode=showvote&voteid=8549924"> などというエラーが出ます。 ちなみに上記の*は、文字数そのまま伏字にしております。 *ttpは、もちろんhttpです。 あるどうやら、全てのエラーは、 URLが記述されたところに発生しているようです・・・ リンク先は、CGIなので、?***=***などは何個も使っています。 もしかして、RSSでは、URLの?、=とかは使ってはいけないんですか? 問題のRSSについては、 ちょっとURLなどがあるので、アップ出来ません どうしても必要なら、アップさせていただきます。

  • XML
  • 回答数1
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

http://bakera.jp/ref/html/dataformat/rcdata >属性値の中で文字参照が解釈されることには注意が必要です。特に href属性の値に & を含む URL をそのまま書くことはできませんので注意してください。たとえば、http://example.jp/foo?bar&baz という URL があったとき、ブラウザのアドレスバーには http://example.jp/foo?bar&baz と打ち込むことになりますが、href属性の値としては href="http://example.jp/foo?bar&baz" あるいは href="http://example.jp/foo?bar&baz" と指定する必要があります。 まあ要するに &voteid;という実体参照だとXML Parserが思っちゃっている(この解釈が正しい)から ;が足りない文法エラーだと言っているんだね。

masapiyochan
質問者

お礼

ありがとうございました。 その後、いろいろGoogleなどで調べてみたところ 同様のケースが見つかりまして、 結局、セミコロンは関係なくて、 半角の&をそのまま使ったのが悪かったようです。 &にしたら直りました。 ご迷惑をおかけしました。

関連するQ&A

  • rdfをIE7に認識させるには

    自分のサイトでRSSを配信したいと思い、新着情報を書き込む際にinndex.rdfを生成するWEBアプリを作っています。 index.rdfを生成して、サーバーに保存するところまではできました。 ところがインターネットエクスオプローラー7で確認したところ、RSSと認識していないようで、タイトルとURLと概要をずらずら並べたような文章が表示されました。 .htaccess も作成して「AddType application/xml .rdf」と記載しています。 goo RSSリーダーで試したところ、問題なく表示されました。 どこに問題があるのでしょうか。 ----------------- <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns/" xmlns="http://purl.org/rss/1.0/" xmlns:lang="ja" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" > <channel rdf:about="RDFファイルのURL"> <title>HPの名称</title> <link>HPのURL</link> <description>HPの紹介文</description> <items> <rdf:Seq> <rdf:li rdf:resource="記事のURL1" /> <rdf:li rdf:resource="記事のURL2" /> </rdf:Seq> </items> </channel> <item rdf:about="記事のURL1"> <title>タイトル1</title> <link>記事のURL1</link> <description>概要1 </description> </item> <item rdf:about="記事のURL2"> <title>タイトル2</title> <link>記事のURL2</link> <description>概要2 </description> </item> </rdf:RDF>

  • index.rdf' の実行エラー

    http://~/index.rdfを見ようとすると XML ページを表示できません XSL スタイル シートを使用した XML 入力は表示できません。エラーを訂正してください。 [更新] ボタンをクリックするか、または後でやり直してください。 テキストの内容に無効な文字が見つかりました。リソース 'http://~/index.rdf' の実行エラーです。ライン 11、位置 9 <title>< ソースは以下のとおりです。 <?xml version="1.0" encoding="UTF-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/" xmlns:cc="http://web.resource.org/cc/" xmlns="http://purl.org/rss/1.0/"> <channel rdf:about=http://~/> <title> <title>に書いてある文字が全角、たとえば「サッカー!」であると上記のようにエラーが出てしまいます。 このエラーは全角文字を入れると発生するのですか? それとも何かのタグが抜けているのですか? すいませんが教えてください。

    • ベストアンサー
    • XML
  • ログファイルからRSS生成

    こんにちは。CGI初心者なので、お手やらかにお願いします。 現在、RSSを勉強しておりまして、以下のようなRSS生成CGIを作りたいです。 ご存知の先生方、どうぞ宜しくお願いします。 今回、最新情報などのCGIのログファイルからRSSを生成したいのです。 データの形式は、 ID←tab→タイトル←tab→内容 となっており、このIDがリンクの為のURLになります。 RSSリーダー等で読み込んだ時にタイトルが表示され、リンクできればと思っています。 因みに文字コードは、SJISです。 わかりずらい説明で申し訳ございません。 何卒、宜しくお願いします。

  • RSSの格納、表示がうまくいかない

    データベースへの接続は完了したんですが、RSSの格納がうまくいきません。 エラー文も表示されず原因がわからないのですが、おかしな文はありますでしょうか? <?php require_once(dirname(dirname(dirname(dirname( __FILE__ )))) . '/wp-load.php' ); //ファイルの先頭で読み込む try { $dsn = 'mysql:dbname=hlxclitx_wp1;host=localhost'; $user = 'hlxclitx_wp1'; $password = 'E.HrypHWxNmltXgC5eS26'; $dbh = new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);//エラーが発生した時に、例外を投げる echo "データベースへの接続が出来ました"; }catch (PDOException $e) { echo $e->getMessage();// err時はメッセージを表示 exit; } $url1 = [ 'http://blog.livedoor.jp/dqnplus/index.rdf', 'http://alfalfalfa.com/index.rdf', 'http://himasoku.com/index.rdf',]; //itemを取り出して$rssに渡す $date = $rss->channel->date; // RSSアイテム取得 値の代入 自作関数 //SQL文を実行、結果を求める $stmt = $dbh->prepare('insert into hlxclitx_feed_rss (data) values (?)'); //$url1配列から先頭のデータをとりだして$urlに渡す なくなるまでループする foreach ($url1 as $url) { //rssがほしいから、もらった$urlを渡す if (($rss = @simplexml_load_file($url)) === false) continue; // RSSタイトルがほしいから、もらったrssを渡す $site_title = $rss->channel->title; //初期のカウント $count = 0; //itemを取り出して$rssに渡す ループ foreach ($rss->item as $item) { //8件を超えたとき取得を終了する if (++$count > 8) break; //タイトル、リンクを取得 $title = $item->title; $link = $item->link; //RSSの情報を取得 $dc = $item->children('http://purl.org/dc/elements/1.1/'); //RSS日付け取得 $date = date('Y-m-d H:i:s', strtotime($dc->date)); // $title, $link, $date を表示 $stmt->execute[json_encode($item)]; } } ?> 補足情報(FW/ツールのバージョンなど) db name hlxclitx_wp1 table name hlxclitx_feed_rss テーブル名 (data) 名前 item

    • ベストアンサー
    • PHP
  • RSSのURLはどれ?

    自分のブログを始めてみたのですが、RSSのURLについて全く理解することができません。自分のブログのRSSのURLをどうすれば知ることができるか全くわからないんです。自分のブログにのっているRSSとかいてある所をクリックしても上の方にいくつか赤い文字でURLのようなものがかいてあるのですがなにがなんだか全くわかりません。あまりRSSについて理解もしていないのですがとにかく今は必要なんです。 説明がうまくできませんでしたが 教えられるだけでも教えてください。

  • WEBページのRSSに関して

    こちらのサイトを参考にRSSを作っています。 http://www004.upp.so-net.ne.jp/chikap15/RSShow.htm 記載されている通りにデータを作りサーバーにアップしたのですが、 エラーが発生しました。 RSSの最初の3行がこちらなのですが、 <?xml version="1.0" encoding="Shift_JIS"?> <rss version="2.0"> <channel> ブラウザで下記の表示がされます。 XML パースエラー: 実体の初めに XML またはテキスト宣言がありません。 URL: http://www.************.co.jp/sample/******RSS.xml 行番号: 2, 列番号: 1:<?xml version="1.0" encoding="Shift_JIS"?> ^ ちなみにこの現象が起きているせいか、GoogleFeedBurnerでもRSSが認識されません。 何が原因なのか見当が付かず困っています。 ご存知の方いらっしゃいましたらご教示お願い致します。

  • 外部のテキストファイルを読み込みたい

    はじめまして、phpを勉強しています。 ちょっとつまづいてしました。 質問をさせて下さい。 (phpは5.25の環境になります) $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); $rssarray = array(); $today = date(U); foreach ($mainrss as $url){ $rss = fetch_rss($url); $title = $rss->channel['title']; $title = mb_convert_encoding($title, "UTF-8", "auto"); (省略) 上記の $mainrss = array ( 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' ); 部分を $mainrssarray = file('rss.txt'); として外部テキストファイルからデータを呼び込もうとしたのですがだめでした。 rss.txtの内容 'http://www.hoge.com/?feed=rss2', 'http://www.hoge2.com/?xml', 'http://www.hoge3.com/index20.rdf' どのようにすれば外部のテキストファイルから呼び込んでくれるでしょうか? 初心者的な質問で大変申し訳ないんですが、アドバイスをよろしくお願い致します;;

    • ベストアンサー
    • PHP
  • Parse error: parse error, unexpected $ エラーについて

    MagpieRSS-0.72を利用して、RSSをサイトに反映させるように苦戦しています。。 HTML内でRSS.PHPをインクルードさせると、以下のようなエラーがでて困っています。。 Parse error: parse error, unexpected $ in /var/www/vhosts/*********.com/httpdocs/rss/rss.php on line 21 RSS.PHPファイルの内容 <?php require_once 'rss_fetch.inc’; // ここから MagpieRSS 0.61 を入手→ http://magpierss.sourceforge.net/ $men = array ("http://japan.****.com/rss/index.rdf", "http://www.******.com/stafflog/atom.xml"); foreach ($men as $pre) { $url = $pre; $rss = fetch_rss($url); $title = $rss->channel[title]; $title = mb_convert_encoding($title, "shift_jis", "auto"); $url = $rss->channel[link]; echo "<div class=\"RSSsite\"><p class=\"tdbg\"><a href=\"$url\" target=\"_blank\">$title</a></p></div>\n"; $rss->items = array_slice($rss->items, 0, 5); // 表示件数を5にしている foreach ($rss->items as $item ) { $title = $item[title]; $title = mb_convert_encoding($title, "shift_jis", "auto"); // 文字コードは適時変更 $url = $item[link]; echo "<div class=\"RSSline\"><li><a href=\"$url\" target=\"_blank\">$title</a></li></div>\n"; $description = $item[description]; //タイトルだけなら下の行とも削除 $description = mb_convert_encoding($description, "shift_jis", "auto"); // 文字コードは適時変更 echo "<p class=\"spc\">$description</p>\n"; } ?> 以下のサイトを参考にして作りました。 http://muto.wordpress.com/2006/06/28/%e8%a4%87%e6%95%b0%e3%81%ae%e3%83%95%e3%82%a3%e3%83%bc%e3%83%89%e3%82%92%e8%a1%a8%e7%a4%ba%e3%81%95%e3%81%9b%e3%82%8bphp/

    • 締切済み
    • PHP
  • スクリプトの解説してもらいたいのですが・・

    このRSSを生成するスクリプトを翻訳して欲しいというか、解説してもらいたのです・・・勉強しろ!と怒られるかもしれませんが、何とか教えていただければ助かります。 ====================== $item_title = "dt"; #タイトルとリンクを抜き出す要素 $item_descr = "dd"; #説明文を抜き出す要素 $host = "http://your.domain"; #ソースからタイトル、リンク、説明文を抽出 while(<>){ if(m|<${item_title}.*?><a href="(.*?)">(.*?)</a>|){ $link[++$items] = $1; $items_list .= qq( <rdf:li rdf:resource="$host$1"/>\n); $title[$items] = $2; $isItem = 1; }elsif(m|<${item_descr}.*?>(.*?)</${item_descr}>| and $isItem){ $str = $1; $str =~ s/<.*?>//g; #不要なマークアップを削除 $descr[$items] = $str; $isItem = 0; #説明文は1要素だけにしておく } } #以下、RSSの構文に従って出力 print <<EOF; <?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xml:lang="ja"> <channel rdf:about="http://your/rss/file"> <title>Your Channel Title</title> <link>http://your/home/page</link> <description>Your channel description</description> <items> <rdf:Seq> $items_list </rdf:Seq> </items> </channel> EOF for $i (1..$#link){ print <<EOF; <item rdf:about="$host$link[$i]"> <title>$title[$i]</title> <link>$host$link[$i]</link> <description>$descr[$i]</description> </item> EOF } print "</rdf:RDF>\n";

  • RSSからblog(ブログ)の本文を抽出したい

    RSSからblogの本文を抽出するプログラムを 作りたいと思っています。 例えば、以下のようなRSSに対して (省略部分があります。) <?xml version="1.0" encoding="UTF-8" ?> - <rdf:RDF xmlns:rdf="http://~> + <channel rdf:about="http://~"> - <item rdf:about="http://blog.livedoor.jp/~"> <title>ショッピング</title> <link>http://blog.livedoor.jp/~</link> <description>今日はとてもいい天気だったので…</description> <dc:creator>shows</dc:creator> <dc:date>2005-09-24T22:00:21+09:00</dc:date> <dc:subject>ブログ</dc:subject> - <content:encoded>  - <![CDATA[   <a href="http://image.blog.livedoor~">   </a>今日はいい天気だったので、<br>   ショッピングに出かけました<br>   <br>     本文略   <br>   新しいibookが欲しいなぁ~<br>  ]]> </content:encoded> </item> (以降略) <content:encoded>のCDATAセクションの中の、 今日はいい天気だったので ~ 新しいibookが欲しいなぁ~ までがブログの本文なのでこれを抽出したいと思っています。 そこで、現在ではjavaを使ってDOMで抽出しようと試みているのですが、 こちらのサイト http://www.hellohiro.com/xmldom.htm のHelloWorldDOMPageList.javaを参考にしてプログラムを作ったのですが、 title,link,descriptionの抽出は出来ましたが、 ブログ本文が記述されている、 <content:encoded> or <![CDATA[ 内の要素(データ)を取得できません。 どのような方法(プログラム)をすれば取得できるようになるでしょうか? よろしくお願いします。

    • ベストアンサー
    • XML

専門家に質問してみよう