" "和" "之间的区别是什么?"

27
有人可以解释一下  之间的区别吗?
我将HTML数据以二进制形式存储在数据库中,其中的空格可以是  或有时 
另外,问题是当我使用JSoup lib将此HTML转换为纯文本时,它会正确地进行转换,但如果我使用java的String.contains(my string)方法时,则似乎具有 的HTML数据与具有 的数据不同。字符串在两个方面都找不到。
例如:
HTML1:This is my test string HTML2:This is my test string 如果我使用JSoup将其转换为纯文本。 它返回
HTML 1:This is my test string
HTML 2:This is my test string
但仍然两个字符串并不相同。 为什么会这样呢?
5个回答

46

 是传统的空格,当你按下空格键时会出现这个字符,它在HTML实体中表示为其等价项。

  分别表示着不间断空格,通常用于防止浏览器将多个空格合并为一个:

"    " => " "(仅合并为一个空格)

"    " => "    "(没有合并)

如果你要解析同时包含传统空格和不间断空格的字符串,可以安全地将其中一个替换为另一个。


我还要强调一点,&nbsp;不会允许换行。所以,如果它被用在两个单词之间(例如<span>test1&nbsp;test2</span>),文本不会被分成两行——如果容器足够小,本来会换行的话。 - undefined

6

&#32; 是一个空格字符,仅此而已。如果这个字符连续出现,最终会折叠成一个空格字符。

&#160&nbsp; 都代表不间断空格字符,如果它们连续出现,将折叠或分隔成一个空格字符。

它们之间唯一的区别在于 &#160 是 HTML 数字,而 &nbsp; 是 HTML 名称。

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

  1. 链接1
  2. 链接2

3

&#32是空格键的字符。

&#160和&nbsp都是不间断空格的字符。

如果您的数据来自不同的来源,可能会出现空格符号编码不同的情况。

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


2

从Java 8开始,以下代码应该可以工作:

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

其中\h是一个水平空格字符,如此处所述。


1
这是错误的。正确的方法是string.replaceAll("\h"," "); - Abdul
1
根据您想要实现的目标而定。 - AP22

1

为了补充其他答案...

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

让我们举个例子:

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

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

因此,在这种情况下,如果您需要这个第一个空格,则差异很重要。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接