我肯定这不可能。不知怎么的,HTML标记中段落中的多个空格没有折叠。它们不
,不在<pre>
标记中,不设置为white-space: pre-wrap;
或white-space: pre;
,并且行为不会通过强制元素上的style="white-space: normal;"
而改变。
我的理解是,只有这三种方法可以保留空白,并且可以使两个或更多的空格显示在html中。
所以问题是:还有什么可能导致序列空白显示为多个空格?一定还有别的东西-但我要知道它是什么,才能找到它,我找到的每一个来源都是关于
,<pre>
和white-space: pre-wrap;
或white-space: pre;
按键编辑:使用firebug,我试着删除一些有问题的空格,然后再次输入。当从键盘上删除并重新输入时,这些空格的行为正常-浏览器中没有意外的空白。因此,它必须是某个字符,在视图源、文本编辑器等中显示为纯空间,但实际上其行为类似于
。它可以是什么,最关键的是,我如何识别它来移除它?有问题的输入的原始源是所见即所得编辑器tinymce,所以我添加了这个标记…
更多细节:我有一些包含包含多个空格的段落文本的HTML,比如这样(在…s之间直接从Firefox视图源复制):
<p> blah blah.... nothing more than a ... blah blah </p>
如您所见,这些是规则空间,而不是
。文档在其他地方有
并且它们以视图源的形式出现,因此它们不会以某种方式伪装成源中的正常空间。此外,css没有设置为
或类似的设置:firebug的“computed”面板没有列出与空白相关的规则。
在段落上强制a
white-space: pre;
对空格没有影响。该规则确实显示在firebug的“computed”面板中,因此正在应用。对段落应用
white-space: normal;
会导致其他更改,但不会更改这些多个顺序空格。例如,它会在选定文本的段落中的每个换行符的结尾处显示一个额外的空格。所以它绝对不会被悄悄地设置为white-space: pre-wrap;
文档中的任何位置都没有
white-space: pre-wrap;
标记。在<pre>
上查找,在源文件中找不到任何内容。因此,它应该在浏览器中显示,每个单词之间有一个空格。它没有。它显示多个空格,好像它是
<pre
或<pre>
或
。但这些都不是。我不知道还有什么办法可以达到类似于cc的效果。还有什么其他方法可以预处理空白并阻止多个空格折叠?可能是什么引起的。
一些背景说明:
在哪些浏览器中看到?Firefox 16.0.2,谷歌Chrome 23.0.1271.95米(Windows)
如果不希望标记可见,为什么标记中会有双倍空格?我正在为一个cms的前端/设计工作,用户将通过tinymce wysiwyg(不可协商)从word和pdf中输入文本。因此,加价会很混乱。修复cms文本格式化程序以清除空白并清除标记超出了本工作的范围。
文档类型?
white-space: pre;
你确定有多个空格?当然,您可以在浏览器前端的单词之间选择一个、两个(在某些情况下为三个空格)。
我能看看所有的代码吗?抱歉,这是一个发布前的网站,不公开。可以随意询问特定的css规则、html标记、加载的javascript内容等。
最佳答案
我猜你的源代码中有问题的空格字符不是SPACE (U+0020),而是NO-BREAK SPACE (U+00A0)。从视觉上看,它们看起来是相同的,但是如果您在十六进制编辑器中查看源代码(该编辑器显示文件中的各个字节),您将看到这些字符的不同编码。
编辑1
此php代码应查找有问题的字符,并将其替换为规则空格:
$strNoBreakSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$strNormalSpace = mb_convert_encoding(' ', 'UTF-8', 'HTML-ENTITIES');
$strInput = str_replace( $strNoBreakSpace, $strNormalSpace, $strInput );
编辑2
创建两个空格字符的更简单方法:
$strNoBreakSpace = json_decode('"\u00A0"');
$strNormalSpace = json_decode('"\u0020"');
关于html - 没有pre,nbsp或空白:pre,如何在HTML中显示多个空格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13711797/