gpt4 book ai didi

java - 什么时候需要转义 Html 字符串?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:04 24 4
gpt4 key购买 nike

在我的旧项目中,我可以在将字符串发送到浏览器之前看到 escapeHtml 的用法。

StringEscapeUtils.escapeHtml(stringBody);

我从 api 文档知道 escapeHtml 做了什么。这里是给出的例子:-

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

我的理解是当我们在转义 html 后发送字符串时,浏览器负责转换回到原来的角色。是吗?

但我不明白为什么以及何时需要它以及如果我们在不转义 html 的情况下发送字符串正文会发生什么?如果我们在将它发送到浏览器之前不执行 escapeHtml,成本是多少

最佳答案

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

  • 也许最初的程序员确信字符串在某些地方没有特殊字符(但是,在我看来,这将是糟糕的编程习惯;转义字符串以防止将来发生更改的代价很小)
  • 字符串在代码中的那一点已经被转义了。您绝对不想两次转义一个字符串;用户最终会看到转义序列而不是预期的文本。
  • 字符串是实际的 html 本身。您不想转义 html;你想让浏览器处理它!

编辑 -转义的原因是像 & 这样的特殊字符和 <最终可能会导致浏览器显示您想要的内容以外的内容。裸&从技术上讲是 html 中的一个错误。大多数浏览器会尝试智能地处理此类错误,并在大多数情况下正确显示它们。 (例如,如果字符串是 <div> 中的文本,这几乎肯定会在您的示例文本中发生。)但是,由于它是错误的标记,某些浏览器将无法正常工作;辅助技术(例如文本转语音)可能会失败;并且可能还有其他问题。

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

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

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

请注意,在 html 文档中有几种文本可以出现的上下文,它们对转义有不同的要求。应转义以下内容:

  • 在文档的字符集中没有表示的所有字符(如果您使用的是 UTF-8 则不太可能,但情况并非总是如此)
  • 在属性值中,引号( '" ,以匹配用于属性值本身的分隔符为准)和符号 ( & ),但不包括 <
  • 在文本节点中,只有 &<
  • 在 href 值内,需要在 url 中转义的字符(有时这些字符需要双重转义,以便在浏览器取消转义一次后它们仍然被转义)
  • 在 CDATA block 中,通常什么都没有(在 HTML 级别)。

最后,除了双重转义的危险之外,转义所有文本的成本是最小的:一点点额外的处理和网络上的一些额外字节。

关于java - 什么时候需要转义 Html 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14765766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com