CDATA 未按预期工作

CDATA does not work as expected

我写了一个函数:

function wrapWithTag($tag, $data) {
  $cdata = "<![CDATA[$data]]>";
  echo "<$tag>$cdata</$tag>";
}

比如我喜欢用它作为

$name = 'myCellContent - <extra>';
wrapWithTag("td", $name);

预期输出将是 html table 单元格,其中包含字符串:

myCellContent - <extra>

它实际上做的是打印空单元格。如何正确使用 CDATA?

编辑:我有一个简单的解决方法:

function wrapWithTag($tag, $data) {
  $data = str_replace("<", "&lt;", $data);
  echo "<$tag>$data</$tag>";
}

但是,我更喜欢使用 CDATA 部分。随意 post 一个解决方案 :P

CDATA sections 是 XML 的一个特征。 HTML 不支持它们。

XHTML 可以,但您必须确保浏览器以 XML 模式解析文档(通过在 HTTP 响应 headers 中设置 Content-Type: application/xhtml+xml)。

在HTML中,如果要使用具有特殊含义的字符,则必须使用实体,例如&lt;

PHP 有 the htmlspecialchars function;没有必要用 str_replace.

自己动手