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级别). 最后,除了双重转义的危险之外,转义所有文本的成本是最小的:网络上的一小部分额外处理和一些额外字节.