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("<", "<", $data);
echo "<$tag>$data</$tag>";
}
但是,我更喜欢使用 CDATA 部分。随意 post 一个解决方案 :P
CDATA sections 是 XML 的一个特征。 HTML 不支持它们。
XHTML 可以,但您必须确保浏览器以 XML 模式解析文档(通过在 HTTP 响应 headers 中设置 Content-Type: application/xhtml+xml
)。
在HTML中,如果要使用具有特殊含义的字符,则必须使用实体,例如<
。
PHP 有 the htmlspecialchars
function;没有必要用 str_replace
.
自己动手
我写了一个函数:
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("<", "<", $data);
echo "<$tag>$data</$tag>";
}
但是,我更喜欢使用 CDATA 部分。随意 post 一个解决方案 :P
CDATA sections 是 XML 的一个特征。 HTML 不支持它们。
XHTML 可以,但您必须确保浏览器以 XML 模式解析文档(通过在 HTTP 响应 headers 中设置 Content-Type: application/xhtml+xml
)。
在HTML中,如果要使用具有特殊含义的字符,则必须使用实体,例如<
。
PHP 有 the htmlspecialchars
function;没有必要用 str_replace
.