2009-05-04 21 views
3

RSSフィードに問題があります。私は<title>This is a title </title>RSSフィードとcdataの問題

タイトルはフィード

にうまく表示されないが、私は $タイトル=「これはtilteある」とDDOとき

<title><![CDATA['$title']]></title> 

タイトルがまったく表示されません。


まだ動作しません。私はdynamicly私のRSSフィードを生成し、それが次のようになります。

$item_template=" 
     <item> 
     <title>[[title]]</title> 
     <link>[[link]]</link> 
     <description><![CDATA[[[description]]]]></description> 
     <pubDate>[[date]]</pubDate> 
     </item> 
     "; 

とループで:タイトルはユーロ記号を持っているとき

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"), 
array(htmlentities($row["title"]),$url,$description,$date), 
$item_template); 

問題は、具体的です。

Â\x80 

より詳細な情報:それはのような私のRSSバリに表示

私は最後の数日間これでstruggelingされていると私は解決策を見つけることができません[OK]を。だから私は賞金を稼ぐつもりです。ここではより多くの情報がある:

  • フィードに入る情報は(私が管理する)ラテン1つのデータベース
  • に格納されているデータベースでユーロ記号がある場合に問題が表示されます。そのような€または&euro;
  • ユーロ記号天気をどんなには時々奇妙なcharachtersのようにか私はいない読者の側に供給側の問題を解決しようと
  • Âの\ X80のように表示されます。
  • 完全なコードはここにあります:codedump
  • 次のように:ユーロ記号を解析できない場合、項目(タイトルまたは説明のいずれか)が空白に表示されることがあります。だから、ブラウザでフィードを表示する際にソースを見ると、<title></title>

さらに詳しい情報が必要な場合はお尋ねください。

+0

ところで、英語とドイツ語を混用しないでください。 「データム」は冷たく聞こえるが、データの特異なものである。あなたは "日付"を探しています。 GünlingfromMünster(Westf。) – phihag

+0

base64_encode($ row ["title"])のように、データベース値の正確な値を教えてください。)なぜこの値にユーロ記号が含まれていると思いますか? (私はどうやってそれを入力したのですか?他の場所では "€"として表示されますか?) – phihag

答えて

15

問題は出力コードです。

echo '<title><![CDATA[$title]]></title>'; 

側の注意点として

echo '<title><![CDATA[' . $title . ']]></title>'; 

に変更するには、次のことを気にしてください:フォローアップを使用して独自の質問に答えるが、元のものを編集しないでください。正当な理由で正規表現を使用しないでください。推測しないでください。

代わりに、あなたはすべてに沿って行っているはずです何:のように、htmlentititesでタイトルをラップして行われる:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>'; 

を文字は、使用しているコードする[encoding]を交換してください。おそらく、これは「UTF-8」です。これはphp(< 6)がデフォルトでISO-8859-1を使用しているため必要です。そのエンコーディングのユーロ記号。詳細については、well-written introductionを参照してください。

read about XMLもお勧めします。第2章から始めましょう。

+1

私は自分のフォローアップとeditetを私のスタートポストから削除しました。 – sanders

+0

私はまだあなたの答えを見ることができますが、努力のおかげで。申し訳ありませんが、私の答えは不完全で、私はすぐにそれを見たはずです。また、文字エンコーディングを指定する必要があります。答えを編集しました。 – phihag

+0

さて、まだユーロ記号に問題があります。 $ s。= str_replace( \t \t \t \t \t \t \t \t \tアレイ( "[タイトル]]"、 "[リンク]]"、 "[説明]"、 "[[基準]")、 \t \t \t \t \t \t \t \t \tアレイ(にhtmlentities($行[ "タイトル"]、ENT_NOQUOTES、 "UTF-8"、false)を、$のURL、$記述、$データム)、 \t \t \t \t \t \t \t \t \t $ item_template); \t \t \t \t \t これは、空のタイトルを返します。 – sanders

1

どのプログラミング言語または環境をお使いですか?例えば、PHPでは、一重引用符は内部の変数の評価を防ぎます。

それ以外の場合は、実際にはこれらの引用符は必要ありません。 PHPの配列構文に混乱しているかもしれません。

だから、より良い書き込みをしたい:

<title><![CDATA[$title]]></title> 
-1

私はRSSプロファイルがそれを許可していないと信じて:this文書はtitleは、さらにas followsを定義された文字データを保持していると述べています。

-1

This articleは、さまざまな状況でユーロ記号とサポートについての情報に役立ちます。この記事の提案の中には、&#8364;または&euro;を使用するか、記号を「ユーロ」に置き換える方法があります。がんばろう!

3

htmlentities()の代わりにhtmlspecialchars()を使用してください。

RSS/ATOMフィード HTMLではないため、HTMLエンティティを使用することはできません。 XML has only five entities defined by defaultですので、&euro;は使用できません。 UTFを使用しているので、変換なしで(htmlentities)、他の機密文字(htmlspecialchars)をエスケープしてリテラルユーロ記号を使用しています。

これは完全に有効なRSS/XMLです。これで問題が解決しない場合は、別の場所にあることを意味します(詳細については、RSSの生ソースを生成してください)。

0

エンコード機能を使用する理由を理解できません。第三者があなたのコンテンツを受け取ると、その文字列をどのように解読するのか分かりません。私は だと思います - あなたはXMLを壊すかもしれないタグにCDATAを使用するべきです - XMLを書くために明確に定義されたライブラリを使用してください。 PHPの場合:DomDocumentまたはXML Writer(http://php.net/manual/en/book.xmlwriter.php)