我使用PHP中的PDO驱动程序将html从<textarea></textarea>
保存到Mysql数据库。我尝试过使用htmlentities() & htmlspecialchars()
。当从数据库请求html显示在DOM中时(分别使用html_entity_decode和&amp; htmlspecialchars_decode),它会逐字地返回标记。
所以,例如:
强文将以<strong>strong text</strong>
我不完全确定它是否重要,但页面是用ANSI编码的,而我的doctype是
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
答案 0 :(得分:1)
我正在从
保存html<textarea></textarea>
请注意,就浏览器而言,它正在发送文本。是否为HTML取决于你如何处理它。
如果要在HTML文档中显示提交的文本(例如,如果在文本区域中键入我尝试过使用
htmlentities()
&amp;htmlspecialchars()
htmlspecialchars()
并且您要呈现文本,则 <strong>
是正确使用的工具小于,强,大于
当从数据库请求html显示在DOM中时(分别使用html_entity_decode和amp; htmlspecialchars_decode),它会逐字地返回标记。
这是你的问题。
你是:
你应该做什么:
在步骤4使用htmlspecialchars
,永远不要解码它(浏览器会这样做)。
如果您希望用户能够输入将呈现为HTML的HTML,请跳过步骤4.这将使您容易受到XSS攻击,因此除非您完全信任所有具有访问权限的人,否则请使用基于DOM的白名单关于数据的HTML清理程序。