IE无法显示错误:Internet Explorer不支持使用DTD的订阅源

时间:2012-10-18 00:23:57

标签: php xml rss feed xml-validation

当我在IE中访问以下PHP代码的页面时,IE会产生错误,“Internet Explorer不支持带有DTD的订阅源。此订阅源包含DTD(文档类型定义)。...... DTD是用于定义网页的结构.Internet Explorer不支持Feed中的DTD。“

<?php 
header('Content-Type: text/xml');
echo '<?xml version="1.0" encoding="UTF-8" ?>';
?>          
<!DOCTYPE doctypeName [
   <!ENTITY nbsp "&#160;">
]>                  
<rss version="2.0">
<channel>
    <title>Sample Feed</title>
    <link>http://google.com</link>
    <description>This is a test</description>   
        <item>
            <title>Item</title>
            <description>This is the item.&nbsp;&nbsp;</description>
        </item>
</channel>      
</rss>

我怀疑这部分是问题所在:

<!DOCTYPE doctypeName [
   <!ENTITY nbsp "&#160;">
]>  

但如果删除它,我会收到此错误:

  

对未定义实体的引用'nbsp'。   行:10字符:36

     

这是项目。

因此有必要在description标记中允许&nbsp;

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

&nbsp;不是有效的XML。使用DTD使其有效是一个糟糕的解决方法。

如果您在内容中需要它,那么该内容实际上是HTML;在这种情况下,你应该

  • 将其打包在CDATA tags
  • 将&符号转换为&amp;

This question概述了哪种方法更好。 Quentin的回答还包含另一种解决方案,使用XML库创建标记。对于您的具体示例而言可能有点过分,但这通常是最佳方式。