Php 将HTML从用户安全加载到文本区域

Php 将HTML从用户安全加载到文本区域,php,html,post,Php,Html,Post,我在一个项目中使用TinyMCE 4,我需要能够用通过POST提交的HTML预先填充textarea(用于服务器端错误处理,而不删除他们的所有工作)。我知道textarea的工作原理主要类似于标记,因为里面的HTML不会解析为DOM,所以大多数网站都会显示演示: 但是当用户提交包含不匹配的或标记的HTML时会发生什么 有没有标准的方法来管理这种风险?在输出时,在php中使用htmlspecialchars($\u POST['demo'])仅从用户输入中删除标记。请参阅使用正则表达式的帖子。它

我在一个项目中使用TinyMCE 4,我需要能够用通过POST提交的HTML预先填充textarea(用于服务器端错误处理,而不删除他们的所有工作)。我知道textarea的工作原理主要类似于标记,因为里面的HTML不会解析为DOM,所以大多数网站都会显示演示:

但是当用户提交包含不匹配的
标记的HTML时会发生什么


有没有标准的方法来管理这种风险?

在输出时,在php中使用
htmlspecialchars($\u POST['demo'])
仅从用户输入中删除
标记。请参阅使用正则表达式的帖子。它告诉您如何仅删除某些标记(不像
htmlentities
)以删除所有标记。

htmlentities函数将替换每个html字符(例如使用xmp标记而不是文本区域)。它将显示html本身


例如:

TinyMCE可能有一个内部方法来处理这个问题,我不使用它,但它的兄弟cfkeditor使用它。在尝试下面的任何建议之前,你应该检查它的文档。看看它是最好的!这不起作用,因为textarea需要包含有效的HTML。TinyMCE最终提交的值是有效的HTML。这个我会的。试试看。它确实适用于tinyMCE的默认设置,因为它们转换编码字符,但这带来了一个单独的问题,即不知道我们经过了多少编码,用户是否希望实体作为实体。它还使非javascript回退与javascript输入不同,这使得它成为一个值得怀疑的设计选择。嗯,tinyMCE解码字符并在提交时对其重新编码。因此,基本上html在数据库/文件中始终处于正常状态。因此,您永远不会有任何问题。用户可以在tinyMCE上单击html查看html或将其复制粘贴为html。因此,一切都将正常工作。Javascript还将返回未编码的值iT(因此,如果您在textarea中对其进行编码,则在javascript中获取值将返回此结果,因为textarea需要包含有效的HTML。TinyMCE最终提交的值是有效的HTML。此处列出的正则表达式可能会被格式错误的输入(如
)击败。总之,使用正则表达式解析HTML通常是一个非常糟糕的主意,bec在这种情况下,您首先需要使用
str_replace()从输入中修剪空白
。其他实例不应超出标准解释器或浏览器解释器的范围。这只是许多潜在滥用的一个例子。击败大多数基于正则表达式的html解析器非常容易。这只会将问题转移到用户可以输入
从输入中删除xmp的地方。它的使用相对少于textarea。