任意の「説明」をポッドキャストフィードの有効なXMLデータに変えるPHP関数

StackOverflow https://stackoverflow.com/questions/3163142

  •  02-10-2019
  •  | 
  •  

質問

ポッドキャストフィードを作成するためのドキュメントを読んでいます iTunesに適しています, 、 そしてその 一般的な間違い セクションは言う:


HTMLという名前の文字エンティティを使用します。

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

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

ようではない HTML, 、XMLは5つの「名前付きキャラクターエンティティ」のみをサポートしています。

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

上記の5文字は、XMLで逃げる必要がある唯一の文字です。他のすべての文字は、UTF-8をサポートするエディターに直接入力できます。たとえば、文字のUnicodeを指定する数値文字参照を使用することもできます。

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

詳細については、参照してください XML文字とエンティティ参照.


今私は使用しています htmlentities() PHP5の下で、フィードは検証と機能しています。しかし、私がコンテンツに入れることができるものを集めているものから、それがもはや有効ではないエンティティになるかもしれません。悪いデータを渡さないことを保証するために使用する最良の機能は何ですか?私は妄想的なものが入力され、エンティティイズーが入力され、フィードを壊します - 私はただ使用する必要があります str_replace() 名前付きエンティティに置き換えて、残りはそのままにしておきますか?または使用できます htmlspecialchars() 何とかして?

要するに、ドロップインの代替品は何ですか htmentities() これにより、ポッドキャストRSSフィードの説明、タイトルなどが安全であることを確認しますか?

役に立ちましたか?

解決

どちらもできます:

  • 代わりにCDATAブロックを使用します(正しいエンコード、つまり、XMLファイルのエンコードがデータのエンコードと一致することを確認してください)。あなたが探している必要がある唯一の考えはです ]]>, 、文字通りCDATAブロックに置くことはできません。
  • 使用する mb_encode_numericentity それ以外の htmlentities (おそらく組み合わされています htmlspecialchars HTMLの以前のデコードは、 mb_convert_encoding).

XMLファイルのエンコードがUTF-8の場合、エンティティを削除するだけです。次のHTMLフラグメントがあるとします。

&copy; 2005 John Doe

それから、あなたはただできる:

$data = "&copy; 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top