22

任何人都可以解释我之间的区别  and  吗?

我有 html 数据以二进制形式存储在数据库中,并且空间可以是  有时是 .

还有一个问题是当我使用它将这个 HTML 转换为纯文本JSoup lib时,它会正确转换,但是如果我使用 java 的 String.contains(my string) 方法。看起来拥有的 HTML 数据与拥有 的不同 。反之亦然找不到字符串。

例子:

HTML1:This is my test string

HTML2:This is my test string

如果我使用 JSoup 将其转换为纯文本。它返回

HTML 1:这是我的测试字符串

HTML 2:这是我的测试字符串

但是两个字符串仍然不相同。为什么会这样?

4

5 回答 5

43

 是经典空间,当您按下空格键时,您会得到一个,由他的 HTML 实体等价物表示。

  表示不间断空格,通常用于防止浏览器将多个空格折叠在一起:

"    "=> " " (只折叠成一个空格)

"    "=> " " (未折叠)

如果您正在解析一个同时包含经典空格和不间断空格的字符串,则可以安全地替换一个。

于 2012-08-16T09:22:26.273 回答
6

 , 只是一个空格字符而已。此字符的常规出现将在最后折叠为一个空格字符。

其中 as&#160 都代表不破空字符,如果连续出现一个接一个,就会被折叠或断成一个空格字符。

只是,它们之间的区别在于&#160HTML编号HTML 名称 

基本上所有这些都是 HTML 实体。您可以通过以下链接了解和了解它们。

  1. 链接 1
  2. 链接 2
于 2012-08-16T09:17:12.643 回答
3

是空格键的字符。

  和   都是非中断空格的字符。

如果您的数据来自不同的来源,则空格符号的编码可能不同。

在直接比较中,它们可能会显示为不同。

于 2012-08-16T09:17:08.367 回答
2

Java 8 及以后的版本应该可以工作:

string.replace("\\h", " "); 或者 string.replaceAll("\\h", " ");

其中 \h 是此处描述的水平空白字符

于 2017-08-04T07:09:17.540 回答
0

要完成其他答案...

除了不间断的行和多个空格的折叠之外,即使大多数答案都说相反,HTML渲染实际上也不会完全相同,这通常是正确的。

让我们举个例子:

<span>&#32;test</span> <br/>
<span>&#160;test</span>

第一个span将在字符串的开头不包含空格,而第二个跨度将。这肯定是崩溃行为的一部分:https ://en.wikipedia.org/wiki/Non-breaking_space 。

所以在这种情况下,如果你需要这个第一个空间,区别很重要。

于 2021-11-24T08:50:03.607 回答