2012-12-04 84 views
4

我相信这不应该是可能的。不知何故,我的HTML标记段落内的多个空格不会崩溃。他们&nbsp;<pre>标签不设置为white-space: pre-wrap;white-space: pre;和行为是不通过在元素上强制style="white-space: normal;"改变。如何在HTML中显示多个空格,没有pre,nbsp或空格:pre?

我的理解是,只有这三种方法可以保留空白,并且可以在HTML中显示两个或多个空格。

所以问题是:还有什么可能导致连续的空格显示为多个空格?一定有别的东西 - 但我不能去找它,直到我知道它是什么,我每次找源只是在谈论&nbsp;<pre>white-space: pre-wrap;white-space: pre;

密钥编辑:用Firebug我试图删除一些有问题的空白并重新输入。当从键盘上删除并重新输入时,空格就像正常一样 - 在浏览器中没有意外的空白。所以它必须是一些字符,显示在视图源文本编辑器等作为一个简单的空间,但实际上像&nbsp;行为。它可能是什么,关键是,我如何识别它以将其删除?违规输入的原始来源是所见即所得编辑器TinyMCE的,所以我补充说,标签...


更多细节:我有一个包括多个空格,像这样的一些包含HTML段落文本(间在... s的复制从Firefox查看源直接):

<p> blah blah.... nothing more than a ... blah blah </p> 

正如你所看到的,这些都是常规空格,不&nbsp;。该文档在其他地方有&nbsp;,并且它们在视图源中显示为这样,因此它们不是伪装成源中正常空间的掩码。

此外,的CSS是设置为white-space: pre;或类似的东西:

  • Firebug的 '已计算' 面板列出没有空格相关的规则。
  • 在段落上强制使用white-space: normal;对空格没有影响。该规则确实显示在Firebug的“计算”面板中,因此它正在应用。
  • white-space: pre-wrap;应用于段落会导致其他更改,但不会更改这些多个顺序空间。例如,它会在选定文本段落的每个换行符的结尾处显示一个额外的空格。所以这绝对不是以某种方式被悄悄设置为white-space: pre-wrap;

没有<pre>标签在文档中,任何地方。找到<pre在源头找不到任何东西。

因此它应该在浏览器中显示每个单词之间有一个空格。它没有。它显示多个空间,就好像它是<pre>&nbsp;white-space: pre;。但它不是这些。

还有必须是一些其他方式得到white-space: pre;像我不知道的效果。还有什么其他的方式来预先格式化空白,并停止多个空间崩溃?什么可能导致这一点。


一些背景说明:

  • 见于哪些浏览器? Firefox 16.0.2,谷歌浏览器23.0.1271.95米(Windows)
  • 为什么在标记中存在双倍间距的空白,如果你不希望它可见?我正在研究CMS的前端/设计,其中用户将通过TinyMCE wysiwyg(不可协商)从Word和PDF输入文本。因此,标记将是混乱的。修复CMS文本格式化程序以擦除空白并清除标记超出了本工作的范围。
  • 文档类型?<!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">
  • 您确定有多个空格吗?当然,您可以选择一个,两个,在某些情况下,浏览器前端中的单词之间有三个空格。
  • 我可以看到所有的代码吗?对不起,但它是一个预发布网站,它不公开。随意问有关特定CSS规则,HTML代码,JavaScript加载的东西等等等等
+0

这看起来很愚蠢。如果HTML无法按预期工作,则需要几秒钟才能看到发生了什么。向我们展示一个例子。给我们一个网址。 –

+0

@ user568458可以把文本部分放在jsfiddle中吗? –

+0

@JonathanWood它确实看起来很愚蠢,但我已经在原帖中回复了您的评论。这些位置中的空格直接从视图源中复制,并且我解释了为什么我无法在最终项目符号中放入URL。 – user568458

回答

6

我猜,在源代码中有问题的空格字符不是SPACE (U+0020),但实际上却是NO-BREAK SPACE (U+00A0)。从视觉上看,它们看起来是相同的,但是如果您使用十六进制编辑器(显示文件中的单个字节)查看源代码,则会看到这些字符的不同编码。

编辑1

这PHP代码应该找到与常规空格替换有问题的字符:

$strNoBreakSpace = mb_convert_encoding('&#x00A0;', 'UTF-8', 'HTML-ENTITIES'); 
$strNormalSpace = mb_convert_encoding('&#x0020;', 'UTF-8', 'HTML-ENTITIES'); 

$strInput = str_replace($strNoBreakSpace, $strNormalSpace, $strInput); 

编辑2

创建两个空格字符的简单方法:

$strNoBreakSpace = json_decode('"\u00A0"'); 
$strNormalSpace = json_decode('"\u0020"'); 
+0

正好 - 我的文本编辑器中的“第二个空格”显示为两个。 http://www.onlinehexeditor.com中的字符 - 0xc2后跟0xa0,根据http://www.utf8-chartable.de/unicode-utf8-table.pl?start=128&number=128&names=-&utf8=0x表示unicode字符点U + 00A0。谢谢 - 我以为我生气了(从非Unicode流利的读者得到的许多降价来看,其他人显然认为我也会发疯......) – user568458

+1

降价是不公平的 - 你问了一个很好的问题,并提供了一个大量的信息真的有助于缩小问题的根源。 – TachyonVortex

+5

谢谢:)这是StackOverflow,所以我想downvotes是因为问题[没有足够的jQuery](http://www.doxdesk.com/img/updates/20091116-so-large.gif);) – user568458