PHP功能将任意“描述”变成播客feed的有效XML数据
-
02-10-2019 - |
题
我正在阅读用于创建播客提要的文档 适合iTunes, ,和 常见错误 部分说:
使用html命名字符实体。
<! — illegal xml — >
<copyright>© 2005 John Doe</copyright>
<! — valid xml — >
<copyright>© 2005 John Doe</copyright>
与众不同 html, ,XML仅支持五个“命名角色实体”:
character name xml
& ampersand &
< less-than sign <
> greater-than sign >
’ apostrophe '
" quotation "
上面的五个字符是唯一需要在XML中逃脱的字符。所有其他字符都可以直接输入支持UTF-8的编辑器中。您还可以使用指定字符的Unicode的数字字符引用,例如:
character name xml
© copyright sign ©
℗ sound recording copyright ℗
™ trade mark sign ™
有关进一步参考,请参见 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片段:
© 2005 John Doe
然后,您可以做:
$data = "© 2005 John Doe";
$data = mb_convert_encoding($data, "UTF-8", "HTML-ENTITIES");
$data = htmlspecialchars($data, ENT_NOQUOTES, "UTF-8");
不隶属于 StackOverflow