是否可以在<pre> tag</pre>内使用CDATA

时间:2010-04-30 18:34:24

标签: html xhtml cdata

我想在HTML页面中显示异常跟踪。

执行此操作的一种方法是在异常跟踪中转义HTML特殊字符并将其转储到<pre>标记内。

虽然它有效但效率非常低。我认为一种方法是用CDATA包裹跟踪。我已经尝试过,但没有显示任何内容。

我的问题,这可以吗?

这是我的微弱尝试。

  <pre><![CDATA[blah, blah, blah with <>
  and blah blah blah with &
    and more blah, blah]]></pre>

2 个答案:

答案 0 :(得分:10)

只有当您将页面作为XML(application/xhtml+xml)提供时,它才有效;纯HTML中没有CDATA部分。 HTML模式下的大多数浏览器都会忽略示例CDATA部分。

无论如何,在字符串周围投掷<![CDATA[ ... ]]>不足以包裹它。如果您的跟踪信息中包含序列]]>,则结束CDATA部分,您将遇到同样的问题。所以你必须至少做一次逃脱以应对这种情况,如果你要做一个逃避过程,你也可以做一个正确的HTML逃脱。

这就是CDATA部分毫无意义的原因。许多人似乎认为它在某种程度上贬低了他们考虑逃避问题,但事实并非如此。

无论如何,HTML转义并不是低效的。这是几个字符串替换。任何Web应用程序(*)都会在每个页面上进行一百次HTML转义。再添加一个 - 特别是对于效率根本不重要的调试案例! - 没有很大的负担。

(*:好吧,除了来自PHP教程的写得不好的应用程序,其作者从未听说过htmlspecialchars,显然。)

答案 1 :(得分:1)

是的,但仅限于XHTML(理论上,我认为它应该在HTML中工作,但是Web浏览器处理标记汤而不是HTML 4.x)而不是如果您将文档作为text / html(您必须使用)如果您希望它与Internet Explorer一起使用)。

就效率而言,将<&>替换为各自的实体是任何编程语言(或具有Find&amp; Replace工具的文本编辑器)中的一项简单操作),除非在极其有限的带宽条件下,否则不会增加大量字节。