繁体   English   中英

具有ajax可编辑文本区域的htmlentities

[英]htmlentities with ajax editable textarea

这是用户可以在我的网站上进行的工作流的示例:

  1. 创建一个包含内容的任务:我使用htmlentities对内容进行编码并将其存储在数据库中(是的,我决定存储编码后的内容);

  2. 用户稍后返回并单击以查看任务。 事实是,内容的预览是在禁用的文本区域中完成的。

    • 我尝试在textarea中打印内容时尝试使用htmlentities_decode (如果用户输入了错误的内容,则会出现XSS问题);

    • 我只打印编码的文本,一切都很好。

  3. 用户单击EDIT ,这将使textarea可编辑

  4. 用户单击SAVE

这是我的主要问题,因为在打印文本之前我没有对文本进行解码,但仍对其进行了编码,并且当用户保存文本时,会对其进行重新编码。 因此,先前的内容是双重编码的。

因此,如果用户是第一次输入以下内容:

blablabla  </textarea/> yeah!

然后,将其编码,结果是:

blablabla  &lt;/textarea/&gt; yeah!

然后,当我显示它时,它显示为用户先前输入的内容,但是如果他将其保存,结果是:

blablabla &amp;lt;/textarea/&amp;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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM