我有一个奇怪的问题:
在数据库中,我有一个文字 & 符号和 lt 分号:
<div
每当它打印到 html textarea 标签中时,页面的源代码都会显示 >
作为 >
。
如何停止此解码?
原文由 Rami Dabain 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有一个奇怪的问题:
在数据库中,我有一个文字 & 符号和 lt 分号:
<div
每当它打印到 html textarea 标签中时,页面的源代码都会显示 >
作为 >
。
如何停止此解码?
原文由 Rami Dabain 发布,翻译遵循 CC BY-SA 4.0 许可协议
您无法阻止实体在文本区域中被解码,因为文本区域的内容 不是(与脚本或样式元素不同)固有的 CDATA,即使错误恢复 有时 可能给人的印象是。
textarea 元素的定义是:
<!ELEMENT TEXTAREA - - (#PCDATA) -- multi-line text field -->
即它包含 PCDATA,它 被描述为:
文档文本(由 SGML 结构“#PCDATA”表示)。文本可能包含字符引用。回想一下,这些以
&
开头并以分号结尾(例如,Hergé's adventures of Tintin
包含 e 急性 字符的字符实体引用)。
这意味着当您键入(的无效 HTML)“标记开始”( <
)时,浏览器会将其更正为“小于号”( <
),但当您键入“实体的开始”( &
),这 是 允许的,不会发生错误更正。
你需要写下你的意思。如果你想包含一些 HTML 作为数据,那么你必须将任何具有特殊含义的字符转换为其各自的字符引用。
如果数据是:
<div
那么 HTML 必须是:
<textarea>&lt;div</textarea>
您可以使用标准函数来转换它(例如 PHP 的 htmlspecialchars
或 Perl 的 HTML::Entities 模块)。
注意 1:如果您使用的是 XHTML[2](并且确实在使用它, 如果您将其作为 text/html 提供,则不算数)那么您可以使用显式 CDATA 块:
<textarea><![CDATA[<div]]></textarea>
注意 2:或者如果浏览器正确实现了 HTML 4
好的,但问题是。为什么它仍然解码它们?假设我已经添加 & ,保存 textarea , ti 将被保存 < ,但显示为 < ,再次保存会将其转换回 < (但它将保留 < 在数据库中),再次保存会将其保存为 < 在数据库中,为什么 textarea 解码它?
由于浏览器不以 HTML 格式发送数据,因此字符不表示为 HTML 实体。
如果你把从客户端接收到的数据放到一个HTML文档中,那么你必须先把它编码成HTML。
原文由 Quentin 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.5k 阅读✓ 已解决
2 回答913 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答921 阅读✓ 已解决
2 回答795 阅读
1 回答797 阅读✓ 已解决
3 回答1.1k 阅读
在 PHP 中,这可以使用 htmlentities() 来完成。下面的例子。
如果没有 htmlentities(),文本区域将解释并显示 TM 符号 (™) 而不是“™”。
http://php.net/manual/en/function.htmlentities.php