質問
RSSフィードに問題があります。
行うとき<title>This is a title </title>
タイトルがフィードにうまく表示される
しかし、私がddoするとき $ title = <!> quot; this is a tilte <!> quot ;;
<title><![CDATA['$title']]></title>
タイトルがまったく表示されません。
まだ機能しません。 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);
問題は、特にタイトルにユーロ記号がある場合です。次に、私のrssバリデータに次のように表示されます:
Â\x80
詳細情報:
わかりました。ここ数日間、これに苦労していますが、解決策が見つかりません。だから私は賞金を開始します。詳細は次のとおりです。
- フィードに含まれる情報は、latin 1データベース(私が管理しています)に保存されます
- データベースにユーロ記号が含まれていると、問題が発生します。 <!>#8364のようなものであっても。または
€
- ユーロ記号は、奇妙な文字や<!>#194; \ x80 のように表示されることがあります
- リーダー側ではなくフィード側で問題を解決しようとしています。
- 完全なコードはここで見つけることができます: codedump
- 次:ユーロ記号を解析できない場合、アイテム(タイトルまたは説明)が空で表示されることがあります。したがって、ブラウザでフィードを表示するときにソースを見ると、
<title></title>
が見つかります。
さらに情報が必要な場合は、お問い合わせください。
解決
問題は出力コードです。変更
echo '<title><![CDATA[$title]]></title>';
to
echo '<title><![CDATA[' . $title . ']]></title>';
補足として、次の点に注意してください。独自の質問にフォローアップで答えるのではなく、元の質問を編集してください。正当な理由がないのに正規表現を使用しないでください。推測しないでください。
代わりに、最初からやりたいことをしてください。タイトルを htmlentitites
でラップして、次のように:
echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';
[encoding]
を使用している文字エンコーディングに置き換えます。ほとんどの場合、これは「UTF-8」です。 php(<!> lt; 6)はデフォルトでISO-8859-1を使用しており、たとえばそのエンコードのユーロ記号。詳細については、このよく書かれた紹介を参照してください。
XMLについて読むこともお勧めします。 2番目の章から始めます。
他のヒント
htmlspecialchars()
の代わりにhtmlentities()
を使用します。
RSS / ATOMフィードは HTMLではないため、HTMLエンティティを使用することはできません。 XMLにはデフォルトで5つのエンティティしか定義されていないため、<!>#8217; t €
を使用します。 UTF <!>#8212;を使用しているため<!>#8217;変換せずに(htmlentities
なし)リテラルユーロ記号を使用しますが、他の機密文字(htmlspecialchars
)をエスケープします。
そしてこれは完全に有効なRSS / XMLです。これが<!>#8217; tの問題を解決しない場合、それは別の場所にあることを意味します(RSSの生成された生のソースを提供してください)。
どのプログラミング言語または環境を使用していますか?たとえば、PHPでは、単一引用符は内部の変数の評価を妨げます。
それ以外の場合、この場合、これらの引用符は本当に必要ありません。 PHPの配列構文に混乱している可能性があります。
したがって、次のように記述します。
<title><![CDATA[$title]]></title>
エンコード関数を使用する理由がわかりません。サードパーティがコンテンツを取得すると、その文字列をデコードする方法がわかりません。と思う -XMLを壊す可能性のあるタグにはCDATAを使用する必要があります -明確に定義されたライブラリを使用してXMLを記述します。 PHPの場合:DomDocumentまたはXML Writer(http://php.net/manual/en/book.xmlwriter.php)
この記事はユーロに関する情報に役立つ場合がありますさまざまなコンテキストでの署名とサポート。その記事からの提案には、€
または€
の使用、または単に記号を単語<!> quot; euro。<!> quot;に置き換えることが含まれます。がんばって!