[英]htmlentities with ajax editable textarea
这是用户可以在我的网站上进行的工作流的示例:
创建一个包含内容的任务:我使用htmlentities
对内容进行编码并将其存储在数据库中(是的,我决定存储编码后的内容);
用户稍后返回并单击以查看任务。 事实是,内容的预览是在禁用的文本区域中完成的。
我尝试在textarea中打印内容时尝试使用htmlentities_decode
(如果用户输入了错误的内容,则会出现XSS问题);
我只打印编码的文本,一切都很好。
用户单击EDIT ,这将使textarea
可编辑
用户单击SAVE 。
这是我的主要问题,因为在打印文本之前我没有对文本进行解码,但仍对其进行了编码,并且当用户保存文本时,会对其进行重新编码。 因此,先前的内容是双重编码的。
因此,如果用户是第一次输入以下内容:
blablabla </textarea/> yeah!
然后,将其编码,结果是:
blablabla </textarea/> yeah!
然后,当我显示它时,它显示为用户先前输入的内容,但是如果他将其保存,结果是:
blablabla &lt;/textarea/&gt; yeah!
而且,因此,如果他再次显示它,则显示效果不佳(随着用户不断编辑任务,它还会占用我的数据库越来越多的空间)。
好吧,我确定这是很多人都经历过的问题,但是我找不到任何好的解决方案。
顺便说一句,我在ENT_QUOTES
使用htmlentities
。
啊哈,这是我的主要问题,因为我在打印文本之前没有对文本进行解码,但仍对其进行了编码,并且当用户保存该文本时,会对它进行重新编码。 因此,先前的内容是双重编码的。
这实际上是正确的,您不应该在打印文本之前对其进行解码 。 实际上,在HTML页面中输出时, 必须对其进行HTML编码。 用户提交时仍未进行编码,因为浏览器已经解释了HTML实体。
除非...您正在DOM中创建TEXT_NODE并将编码后的数据分配给它(在textarea中)? 在这种情况下,浏览器将不会解释HTML实体,您最终将重新提交已经编码的数据。 如果是这种情况,请分配给innerHTML
属性。 但是,在提交数据之前,HTML实体在表单中对最终用户(在第一次编辑中)将是清晰可见的(事实并非如此)?
哼,我解决了我的问题。 我没有注意到,但是对于第一个条目,我使用的是htmlentities(),而在编辑时,我使用的是Zend escape()函数。 仅使用htmlentities()解决了该问题。 我不知道ZF的escape()函数如何工作,但是以后我不会使用它:p
谢谢你的回答:)
无论如何,所以我想知道htmlentities_decode()函数,在哪种情况下应使用它? 当我htmlentities()获取表单并像这样打印时,我从不使用htmlentities_decode()。 那是正常的吗? 所以我想知道此功能用于什么?
再次感谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.