Frage

Ich lese die Dokumentation für das Erstellen eines Podcast-Feed geeignet für iTunes und die Häufige Fehler Abschnitt sagt :


Verwendung von HTML-Named-Entitäten.

<! — illegal xml — >
<copyright>&copy; 2005 John Doe</copyright>

<! — valid xml — >
<copyright>&#xA9; 2005 John Doe</copyright>

Im Gegensatz zu HTML , XML unterstützt nur fünf "Benannte Zeichen-Entities":

character   name               xml
&           ampersand          &amp;
<           less-than sign     &lt;
>           greater-than sign  &gt;
’           apostrophe         &apos;
"           quotation          &quot;

Die fünf Zeichen sind über die einzige Zeichen, die Flucht erfordern in XML. Alle anderen Zeichen können sein direkt in einem Editor eingegeben, dass UTF-8 unterstützt. Sie können auch verwenden numerische Zeichenreferenzen, dass geben Sie den Unicode für das Zeichen, zum Beispiel:

character   name                       xml
©           copyright sign             &#xA9;
℗           sound recording copyright  &#x2117;
™           trade mark sign            &#x2122;

Für weitere Referenz finden Sie unter XML Charakter und EntityReferences .


Im Moment bin ich mit htmlentities() unter PHP5 und das Futter zu validieren und zu arbeiten. Aber von dem, was ich einige Dinge sammeln, die in Inhalt gestellt bekommen könnten vielleicht Einheiten worden, dass es nicht mehr gültig wäre. Was ist die beste Funktion, die ich, um sicherzustellen, verwenden bin nicht auf schlechte Daten vorbei? Ich bin paranoid etwas erhalten eingegeben und erhält entity-siert und das Futter brechen - soll ich mit dem Namen Entitäten nur str_replace() verwenden und ersetzen und den Rest in Ruhe lassen? Oder kann ich htmlspecialchars() irgendwie?

Also kurz gesagt, was ist ein Drop-in-Ersatz für htmentities(), die sicher Eingang sicher ist für die Beschreibung machen, Titel, usw. in einem Podcast RSS-Feed?

War es hilfreich?

Lösung

Sie können entweder:

  • Verwenden Sie einen CDATA-Block statt (so stellen Sie sicher sind Sie die richtige Codierung verwendet wird, das heißt, die Codierung der XML-Datei entspricht die Kodierung der Daten). Das einzige, denken Sie Ausschau haben für ]]> ist, die nicht buchstäblich in einem CDATA-Block gesetzt werden kann.
  • Verwendung mb_encode_numericentity anstelle von htmlentities (ggf. mit htmlspecialchars kombiniert und einem vorherigen Decodieren von HTML-entites mit mb_convert_encoding).

Wenn die Codierung der XML-Datei UTF-8 ist, können Sie nur die Objekte entfernen. Angenommen, Sie haben die folgende HTML-Fragment:

&copy; 2005 John Doe

Dann könnten, die Sie gerade tun:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top