我确信这不应该是可能的。不知何故,我的HTML标记中的段落中的多个空格不会折叠。它们在
代码中不 <pre>
,不,不设置为white-space: pre-wrap;
或{ {1}}并且通过在元素上强制white-space: pre;
来改变行为 。
我的理解是,这些是保留空白的唯一三种方式,并且可以使两个或多个空格以HTML格式显示。
所以问题是:还有什么可能导致顺序空格显示为多个空格?必须有别的东西 - 但是在我知道它是什么之前我不能找到它,而我发现的每个来源都只是谈论style="white-space: normal;"
,
和<pre>
或{{1 }}
密钥编辑:使用Firebug我尝试删除一些有问题的空白并再次输入。从键盘删除并重新输入时,空格表现正常 - 浏览器中没有意外的空格。所以必须是一个在视图源,文本编辑器等中显示为普通空格的角色,但实际上表现得像white-space: pre-wrap;
。什么可以,而且至关重要的是,如何识别它以将其删除?违规输入的原始来源是Wysiwyg编辑器TinyMCE所以我正在添加该标签......
更多细节:我有一些HTML包含段落文本,其中包含多个空格,如下所示(在...之间直接从Firefox视图源复制):
white-space: pre;
如您所见,这些是常规空格,而不是
。该文档在其他地方有<p> blah blah.... nothing more than a ... blah blah </p>
,它们在视图源中显示,因此它们不是
以某种方式伪装成源中的普通空格。
此外, CSS 不设置为
或类似的内容:
对空格没有任何影响。该规则确实出现在Firebug'Computed'面板中,因此它正在应用。white-space: pre;
应用于该段会导致其他更改,但不会更改这些多个顺序空格。例如,它会在所选文本的段落中的每个换行符的末尾显示一个额外的空格。因此,绝对不能以某种方式悄悄地设置为white-space: normal;
文档中没有 white-space: pre-wrap;
标记。在源代码中找到white-space: pre-wrap;
找不到任何内容。
<pre>
或<pre
或<pre>
一样。但这不是其中任何一个。
必须以其他方式获得我不知道的
效果。有什么其他方法来预先格式化空白并阻止多个空间崩溃吗?可能导致这种情况的原因。
一些背景说明:
white-space: pre;
答案 0 :(得分:6)
我猜测源代码中的违规空格字符不是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"');