Ron*_*ero 21 html decoding html-entities
我有一个奇怪的问题:
在数据库中,我有一个文字&符号分号:
<div
Run Code Online (Sandbox Code Playgroud)
每当它打印成html textarea标签时,页面的源代码显示为>
as >
.
如何停止此解码?
Que*_*tin 38
你不能停止在textarea [1]中解码实体,因为textarea的内容不是(不像脚本或样式元素)内在的CDATA,即使错误恢复有时会给人一种印象.
textarea元素的定义是:
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
Run Code Online (Sandbox Code Playgroud)
即它包含PCDATA,其描述如下:
文档文本(由SGML构造"#PCDATA"表示).文本可能包含字符引用.回想一下,这些
&
以分号开头并以分号结束(例如,Hergé's adventures of Tintin
包含急性字符的字符实体引用).
这意味着当您键入(无效的HTML)"标记的开头"(<
)时,浏览器会将其更正为"小于符号"(<
),但是当您键入"实体的开始"(&
)时,这是允许的,没有错误更正发生了.
你需要写出你的意思.如果要将某些HTML作为数据包含在内,则必须将具有特殊含义的任何字符转换为其各自的字符引用.
如果数据是:
<div
Run Code Online (Sandbox Code Playgroud)
那么HTML必须是:
<textarea>&lt;div</textarea>
Run Code Online (Sandbox Code Playgroud)
您可以使用标准函数进行转换(例如PHP htmlspecialchars
或Perl的HTML :: Entities模块).
注意1:如果您正在使用XHTML [2](并且真的使用它,如果您将其作为text/html提供则不计算)那么您可以使用显式CDATA块:
<textarea><![CDATA[<div]]></textarea>
Run Code Online (Sandbox Code Playgroud)
注意2:或者浏览器是否正确实现了HTML 4
好的,但问题是.无论如何它为什么解码它们?假设我已添加&,保存textarea,ti将被保存< ,但显示为<,再次保存将其转换回<(但它将保留在数据库中),再次保存会将其保存为<在数据库中,为什么textarea会对其进行解码?
由于浏览器不以HTML格式发送数据,因此字符不表示为HTML实体.
如果从客户端接收数据然后将其放入HTML文档,则必须先将其编码为HTML.
Chr*_*ard 19
在PHP中,这可以使用htmlentities()来完成.以下示例.
<?php
$content = "This string contains the TM symbol: ™";
print "<textarea>". htmlentities($content) ."</textarea>";
?>
Run Code Online (Sandbox Code Playgroud)
如果没有htmlentities(),textarea将解释并显示TM符号(™)而不是"™".
http://php.net/manual/en/function.htmlentities.php