首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在HTML中显示多个空格,没有pre、nbsp或空白: pre?

如何在HTML中显示多个空格,没有pre、nbsp或空白: pre?
EN

Stack Overflow用户
提问于 2012-12-04 20:58:10
回答 1查看 5.6K关注 0票数 4

我肯定这不可能。不知何故,HTML标记中段落中的多个空格不会折叠。它们是not &nbsp;not<pre>标记中,not设置为white-space: pre-wrap;white-space: pre;,其行为是E 110E 211通过强制元素上的style="white-space: normal;"进行更改。

我的理解是,这是保持空白的唯一三种方法,并且可以使两个或更多的空格显示在HTML中。

所以问题是:还有什么会导致顺序空格显示为多个空格呢?肯定还有别的东西--但我不知道它是什么,我发现的每一个消息来源都只是谈论&nbsp;、<pre>和white-space: pre-wrap;或white-space: pre;。

键编辑:使用Firebug的,我尝试删除一些违规的空格,然后再次输入它。当从键盘删除并重新输入时,空格表现为正常-浏览器中没有意外的空格。因此,它必须是视图源、文本编辑器等中显示为普通空间的某个字符,但实际上它的行为类似于&nbsp;。它能是什么,最重要的是,我如何识别它来移除它?违规输入的原始来源是wysiwyg编辑器TinyMCE,因此我要添加该标记.

更详细:我有一些包含段落文本的HTML,其中包含多个空格( ...s之间是直接从火狐视图源复制的):

代码语言:javascript
复制
<p> blah blah.... nothing  more  than  a ... blah blah </p>

正如您所看到的,这些是规则空间,而不是 &nbsp;。文档在其他地方有&nbsp;,它们在视图源中显示为视图源,所以它们不是&nbsp;在源中伪装成正常空间的方式。

另外,是而不是设置为 white-space: pre;之类的:

  • Firebug的“计算”面板没有列出与空格相关的规则。
  • 在段落中强制使用white-space: normal;对空格没有任何影响。该规则确实显示在Firebug 'Computed‘面板中,因此它正在应用。
  • 将white-space: pre-wrap;应用于段落将导致其他更改,但不会更改这些多序列空格。例如,在选定文本的段落中,在每一行的末尾都可以看到一个额外的空间。所以它绝对不会被偷偷地设置成white-space: pre-wrap;

文档中任何地方都没有 <pre> 标记。在源中的<pre上查找什么都找不到。

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

一定有其他的方法来获得类似white-space: pre;的效果,我不知道。还有哪些其他方法可以预先格式化空格并停止多个空格的折叠?是什么导致了这一切。

一些背景说明:

  • 在哪些浏览器中见过?Firefox16.0.2,GoogleChrome23.0.1271.95米()
  • 为什么标记中有双行空格,如果您不希望它可见?我正在为一个CMS进行前端/设计,用户将通过TinyMCE wysiwyg (不可转让)输入Word和PDF中的文本。因此,标记将是混乱的。将CMS文本格式化程序修复为清除空白并清除标记超出了这项工作的范围。
  • 文档类型? <!DOCTYPE html PUBLIC "-//W3C//DTD HTML+RDFa 1.1//EN">
  • 你肯定有多个空格吗?,你可以选择一,二,在某些情况下,浏览器前端的单词之间有三个空格。
  • 我可以看到所有的codez?抱歉,但它是一个发布前的网站,它是不可公开的。可以随意询问特定的CSS规则、HTML标记、加载的javascript内容等等。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-04 21:09:44

我猜源代码中冒犯的空格字符不是空间(U+0020),而是无中断空间(U+00A0)。从视觉上看,它们看起来是相同的,但是如果您在十六进制编辑器中查看源代码(这会显示文件中的各个字节),您将看到这些字符的不同编码。

编辑1

此PHP代码应该找到并用正则空格替换违规字符:

代码语言:javascript
复制
$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

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

代码语言:javascript
复制
$strNoBreakSpace = json_decode('"\u00A0"');
$strNormalSpace  = json_decode('"\u0020"');
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13711797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档