如何在HTML中显示多个空格,没有pre,nbsp或white-space:pre?

use*_*ca8 4 html css whitespace text tinymce

我相信这不应该是可能的.不知何故,我的HTML标记中的段落中的多个空格不会折叠.他们是不是 &nbsp;,不是一个<pre>标签,设置white-space: pre-wrap;white-space: pre;与该行为通过强制改变style="white-space: normal;"的元素.

我的理解是,这些是保留空白的唯一三种方式,并且可以使两个或多个空格以HTML格式显示.

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

密钥编辑:使用Firebug我尝试删除一些有问题的空白并再次输入.从键盘删除并重新输入时,空格表现正常 - 浏览器中没有意外的空格.所以它必须是一些角色,在视图源,文本编辑器等中显示为一个普通的空间,但实际上表现得像&nbsp;.什么可以,而且至关重要的是,如何识别它以将其删除?违规输入的原始来源是Wysiwyg编辑器TinyMCE所以我正在添加该标签...


更多细节:我有一些包含段落文本的HTML,包含多个空格,如下所示(在...之间直接从Firefox视图源复制):

<p> blah blah.... nothing  more  than  a ... blah blah </p>
Run Code Online (Sandbox Code Playgroud)

如您所见,这些是常规空间,而不是 &nbsp;.该文档在&nbsp;其他地方,它们在视图源中显示,因此它们不会&nbsp;以某种方式伪装成源中的普通空间.

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

  • Firebug的"Computed"面板没有列出与空白相关的规则.
  • 强制使用white-space: normal;段落对空格没有任何影响.该规则确实显示在Firebug'Computed'面板中,因此它正在应用.
  • 应用于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内容等.

Tac*_*tex 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 );
Run Code Online (Sandbox Code Playgroud)

编辑2

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

$strNoBreakSpace = json_decode('"\u00A0"');
$strNormalSpace  = json_decode('"\u0020"');
Run Code Online (Sandbox Code Playgroud)

  • 谢谢:)这是StackOverflow,所以我想downvotes是因为问题有[不够jQuery](http://www.doxdesk.com/img/updates/20091116-so-large.gif);) (5认同)