Frage

Ich habe ein Problem mit einem RSS-Feed.

Wenn ich tue <title>This is a title </title>

Der Titel erscheint gut im Futter

Aber wenn ich ddo $ Title = "Dies ist ein tilte";

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

Der Titel überhaupt nicht angezeigt werden.


Es funktioniert immer noch nicht. Ich erzeugen meinen RSS-Feed dynamicly und es sieht wie folgt aus:

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

und in einer Schleife:

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

Das Problem ist, speziell wenn der Titel ein Euro-Zeichen hat. Dann zeigt es in meinem RSS-Validator auf wie:

Â\x80

Weitere Informationen:

Ok Ich habe mit diesem für die letzten Tage struggeling und ich kann eine Lösung nicht finden. Also werde ich eine Prämie beginnen. Hier gibt es mehr Informationen:

  • Die Informationen, die im Futter geht in einer Latin-1-Datenbank gespeichert (was ich verwalten)
  • Das Problem erscheint, wenn ein Euro-Zeichen in der Datenbank ist. Egal, ob es ist wie € oder &euro;
  • Die Euro-Zeichen erscheinen manchmal wie seltsam charachters oder wie  \ x80
  • Ich versuche, das Problem auf der Feedseite nicht auf der Leserseite zu lösen.
  • Der vollständige Code kann hier gefunden werden: codedump
  • Next: manchmal, wenn die Euro-Zeichen können das Element nicht analysiert werden (entweder der Titel oder die Beschreibung) wird leer angezeigt. Also, wenn Sie in der Quelle suchen, wenn das Futter in einem Browser zeigt finden Sie, <title></title>

Wenn mehr Informationen benötigt wird, fragen Sie bitte.

War es hilfreich?

Lösung

Das Problem ist, Ihr Ausgabecode; Änderung

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

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

Als Randbemerkung, etwas dagegen bitte folgend: Sie nicht Ihre eigene Frage mit einem Follow-up beantworten, aber das Original bearbeiten. Verwenden Sie keine regexps für keinen guten Grund. Raten Sie nicht.

Stattdessen tun, was du die ganze Zeit getan haben sollte: Wickeln Sie den Titel in htmlentitites und durchgeführt werden, wie in :

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

Ersetzen [encoding] mit der Zeichenkodierung Sie verwenden. Wahrscheinlich ist dies 'UTF-8'. Dies ist notwendig, weil PHP (<6) verwendet ISO-8859-1 standardmäßig, und es gibt keine Möglichkeit, zum Beispiel auszudrücken die Euro-Zeichen in dieser Codierung. Weitere Informationen finden Sie in diesem gut geschriebene Einführung .

Ich schlage vor, Sie auch über XML . Beginnen Sie mit dem zweiten Kapitel.

Andere Tipps

Verwenden htmlspecialchars() statt htmlentities().

RSS / ATOM-Feeds nicht HTML, so kippen Sie HTML-Entitäten in Anspruch genommen werden. XML hat nur fünf Einheiten standardmäßig definiert, so kann man nicht &euro; verwenden. Da Sie UTF verwenden -. Verwendet wörtliche Euro-Zeichen, ohne Konvertierung (keine htmlentities), aber mit anderen empfindlichen Zeichen zu entkommen (htmlspecialchars)

Und das wäre völlig gültig RSS / XML. Wenn dies das Problem nicht lösen, es bedeutet, dass es woanders liegt (Bitte senden Sie uns erzeugten rohe Quelle der RSS für mehr Hilfe).

Welche Programmiersprache oder Umgebung verwenden Sie? Zum Beispiel in PHP die einfachen Anführungszeichen verhindern Auswertung der Variablen innerhalb.

Ansonsten wird in diesem Fall, dass Sie nicht wirklich brauchen, diese Zitate. Können Sie sich durch die Array-Syntax von PHP verwechselt wurden.

So können Sie besser schreiben würde:

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

Ich verstehe nicht, warum Sie eine Verschlüsselungsfunktion verwendet werden soll. Wenn eine dritte Partei Ihre Inhalte nimmt, wird es keine Idee, wie diese Zeichenfolge zu entschlüsseln. ich denke, dass - Sie sollten CDATA für Tags verwenden, die de XML brechen - Verwendung gut definierte Bibliotheken XML zu schreiben. Für PHP: DomDocument oder XML-Writer (http://php.net/manual/en/book.xmlwriter.php)

Ich glaube RSS Profil erlaubt es nicht: dieses Dokument besagt, dass title hält, Zeichendaten, die weitere definiert als folgt.

diesem Artikel für Informationen über den Euro kann hilfreich sein unterzeichnen und Unterstützung in verschiedenen Kontexten. Einige der Vorschläge aus diesem Artikel sind mit &#8364; oder &euro; oder einfach nur das Schild mit dem Wort ersetzen „Euro“. Viel Glück!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top