【问题标题】:XML Entity not defined in ChromeChrome 中未定义 XML 实体
【发布时间】:2012-06-05 03:38:21
【问题描述】:

我的浏览器告诉我:

error on line 2 at column 308899: Entity 'ntilde' not defined

具体的行在我的 xml 中为:

<LastName>Trevi&ntilde;o</LastName>

名字原本是Treviño,后来被php的htmlentities函数修改了。

我该怎么做才能让 php 和 xml 玩得很好?


在 Mac 上使用 Chrome 19。

【问题讨论】:

标签: php xml


【解决方案1】:

您实际上是在生成 XML 还是 HTML?他们不是一回事。 HTML 定义了一堆实体 (IIRC),而 XML 几乎没有“内置”——只有一些像 &amp;amp;&amp;lt;

当您可以直接使用文本时,为什么还要使用实体?只需确保您使用的编码保持一致(UTF-8 是一个不错的选择)。

【讨论】:

    【解决方案2】:

    您不需要在 XML 中编码波浪字符。它会抛出错误。在这种情况下,最好的办法可能是将文本包装在 CDATA 中。

    <LastName><![CDATA[Trevi&ntilde;o]]></LastName>
    

    【讨论】:

    • 这行得通,但是当我将它传递给SimpleXMLs addChild 时,它会通过用&amp;lt;&amp;gt; 替换&lt;&gt; 来破坏CDATA
    • 查看此链接以了解该问题:stackoverflow.com/questions/3424084/…
    【解决方案3】:

    尝试为 htmlentities 指定编码

    htmlentities($string,ENT_QUOTES,'UTF-8');
    

    【讨论】:

      【解决方案4】:

      显然同时使用htmlspecialcharshtmlentities 可以解决问题。

      htmlspecialchars(htmlentities($value));
      

      【讨论】:

        【解决方案5】:

        应该是:Treviño。 您的 DTD 文件中可能缺少实体? 像这样:

        <?xml version="1.0" encoding="UTF-8"?>
        <!DOCTYPE Customer
        [
        <!ENTITY ntilde "&#241;">
        ]>
        
        <Customer>
        <LastName>Trevi&ntilde;o</LastName>
        </Customer>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-01-19
          • 2011-04-17
          • 2013-09-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-03-28
          • 2020-06-29
          相关资源
          最近更新 更多