代码之家  ›  专栏  ›  技术社区  ›  artlung

php函数将任意“描述”转换为播客提要的有效XML数据

  •  0
  • artlung  · 技术社区  · 14 年前

    我正在阅读创建播客源的文档 suitable for iTunes Common Mistakes 段落说:


    使用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 Character and EntityReferences .


    现在我正在使用 htmlentities() 在php5下,feed正在验证和工作。但是根据我收集到的信息,一些可以放入内容中的东西可能会成为使其不再有效的实体。什么是确保我不会传递坏数据的最佳功能?我是个偏执狂,有些东西会被输入并实体化,然后破坏提要——我应该使用它吗? str_replace() 替换为已命名的实体,而让其余的实体单独存在?或者我可以使用 htmlspecialchars() 不知何故?

    总之,什么是替代品 htmentities() 这将确保在播客RSS提要中输入描述、标题等内容是安全的?

    1 回复  |  直到 14 年前
        1
  •  3
  •   Artefacto    14 年前

    你也可以:

    • 而是使用一个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");