我正在阅读用于创建播客提要的文档 适合iTunes, ,和 常见错误 部分说:


使用html命名字符实体。

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

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

与众不同 html, ,XML仅支持五个“命名角色实体”:

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

上面的五个字符是唯一需要在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 feed中确保输入可用于说明,标题等?

有帮助吗?

解决方案

您可以:

  • 改用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