java – 当我需要转义Html字符串?

前端之家收集整理的这篇文章主要介绍了java – 当我需要转义Html字符串?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在我的遗留项目中,我可以看到在将字符串发送到浏览器之前使用escape Html.
StringEscapeUtils.escapeHtml(stringBody);

我从api doc中知道了escapeHtml的用途.给出了一个例子: –

For example: 
"bread" & "butter"
becomes: 
"bread" & "butter".

我的理解是当我们在转义html之后发送字符串时它转换的浏览器职责@H_404_9@回到原始人物.是对的吗?

但是我没有得到原因,何时需要,如果我们发送字符串体而不转义html会发生什么?如果我们在将它发送到浏览器之前不做escapeHtml,那么成本是多少

解决方法

我可以想到几种可能性来解释为什么有时字符串不会被转义:

>或许原始程序员确信在某些地方字符串没有特殊字符(但是,在我看来这将是糟糕的编程习惯;为了防止未来的变化而逃避字符串的成本非常低)@H_404_9@>该字符串已在代码中的那一点进行了转义.你绝对不想两次逃脱一个字符串;用户最终会看到转义序列而不是预期的文本.@H_404_9@>字符串是实际的html本身.你不想逃避HTML;你希望浏览器处理它!

编辑 – @H_404_9@转义的原因是特殊字符,如&和<最终会导致浏览器显示除您的意图之外的其他内容.一个裸露的&在技​​术上是html中的错误.大多数浏览器尝试智能地处理此类错误,并在大多数情况下正确显示它们. (例如,如果字符串是< div>中的文本,那么几乎肯定会在您的示例文本中发生.)但是,因为它是错误标记,所以某些浏览器将无法正常工作;辅助技术(例如,文本到语音)可能会失败;并且可能存在其他问题.

尽管浏览器尽最大努力从糟糕的标记中恢复,但仍有几种情况会失败.如果您的示例字符串是属性值,则绝对需要转义引号.浏览器无法正确处理以下内容

<img alt=""bread" & "butter"" ... >

一般规则是任何不标记但可能混淆为标记的字符都需要进行转义.

请注意,有几种上下文可以在html文档中显示文本,并且它们具有单独的转义要求.在属性值中,您需要转义引号和&符号(但不是<).您必须转义在文档的字符集中没有表示的字符(如果您使用的是UTF-8,则不太可能,但情况并非总是如此).在文本节点内,只有&和<需要逃脱.在href值中,必须转义需要在URL中转义的字符(有时会双重转义,因此在浏览器取消它们一次之后它们仍会被转义).在CDATA块中,通常不应转义任何内容(在HTML级别). 最后,除了双重转义的危险之外,转义所有文本的成本是最小的:网络上的一小部分额外处理和一些额外字节.

猜你在找的Java相关文章