【问题标题】:removing spaces in <pre> tag - html删除 <pre> 标签中的空格 - html
【发布时间】:2015-07-09 19:33:01
【问题描述】:

您好我正在使用 pre 标签来显示一些文本文件,但问题是在开头和结尾,正在打印 2-3 新行。我该如何删除它? 我通过 http 请求获取文本文件,但无法修改文本文件,我必须按原样显示。

或者有没有更好的方法在 html 中显示文本文件?

【问题讨论】:

  • 你能告诉我们你正在使用的代码吗?

标签: html pre


【解决方案1】:

我过去遇到过类似的问题.....我认为这可能是一个问题,除非您共享代码,否则无法确定(我在我的 AngularJS 应用程序中遇到了问题,所以变量绑定,以下代码中的等都是基于此)

假设您必须在变量 textFile.data 中显示数据(我将数据存储在 textFile.data 变量中)

<pre ng-show = "textFile.isPresent">
    <span>
        {{textFile.data}}
    </span>
</pre>

显示 html 时添加了两个换行符,因为 pre 标记之间的任何内容都会被准确显示。因此添加了 2 行,因为 html 中的“pre”标记之后和“span”标记之后的新行。

我改成这个了

<pre ng-show = "textFile.isPresent"><span>{{textFile.data}}</span></pre>

执行此操作后删除了多余的行。请注意,您也可以通过修改 css 文件来删除它们。如果您不知道如何,请发表评论,我会帮助您。

这只是其中一个原因,得看你的代码,才能知道到底哪里错了

【讨论】:

  • 哦,我不知道pre标签之间的空格会出现在html文件中......谢谢,我犯了类似的错误
【解决方案2】:

您可以尝试使用 str_replace,我不确定您需要替换的只是空格还是换行符,所以我给您举几个例子...

str_replace(' ', '', $name);

这将删除所有可能成为问题的空格,如果您有空间应该存在的地方。

如果行尾有多个空格并且没有其他地方,那么您可以尝试...

str_replace('  ', '', $name);

任何连续有两个空格的内容都将被删除。

如果您在 Linux 上,并且它们是换行符,您可以尝试...

str_replace('\n', '', $name);

这将删除所有在 Linux 中结尾的行,对于 Windows,您可以这样做...

str_replace('\r', '', $name);

或者对于两个系统都尝试...

str_replace('\r\n', '', $name);

同样,如果您有应该存在的行尾,这可能会很困难,所以如果结尾有多个行,您可以尝试...

str_replace('\r\n\r\n', '', $name);

这可能有效。只是想我会给你所有的用例,希望这对你有所帮助。

【讨论】:

  • 我不想删除所有新行,必须保留文本文件中存在的新行字符....在顶部和底部添加新行(2 个新添加的行字符)文本文件中不存在,我认为 pre 标记不会干扰文本文件的格式
  • 如何去掉开头和结尾的多余行?我必须一直解析它吗?
  • 我认为您需要向我们展示您的 HTML 代码和文本文件中的内容,以帮助我们弄清楚发生了什么,否则这只是一个猜谜游戏。您确定空格不在
     标签内吗?我会删除 HTML 中所有可能的空格,所以有 
    textfile
【解决方案3】:

起初我以为你可以尝试用新行拆分。像这样。

<?php
    $lines = explode("\n", $html_string);
    for ($i = 0; $i < count($lines); $i++) {
        $line = trim($lines[$i]);
        $lines[$i] = $line;
    }
    $html_string = join("", $lines);
?>

但我觉得这可能还不够。可能存在单词之间有多个空格字符的情况。

另一种方法是将字符串递归地分解两个空格,然后在没有分隔符的情况下再次将其连接在一起。继续这样做,直到explode 的结果只包含一个值。

编辑:在下面添加了一个未经测试的 POC。

recursiveTrim($str) {
    $lines = explode($str, "  "); // Split by 2 spaces, not one
    if (count($lines) == 1)
    {
        return $str;
    }

    for ($i = 0; $i < count($lines); $i++) {
        $lines[$i] = trim($lines[$i]);
    }
    $str = implode("", $lines);
    recursiveTrim($str)
}

【讨论】:

  • 那些额外的行不在原始文本文件中,但它们正在被添加到输出中.....
  • 我为第二种技术添加了一个简单的 POC。它可能需要一些清理,因为我不擅长递归。
【解决方案4】:

&lt;pre&gt;标签专为显示预格式化文本而设计。

 标签定义了预格式化的文本。
  
  

 元素中的文本以固定宽度的字体显示(通常
  Courier),它同时保留了空格和换行符。
  
  

http://www.w3schools.com/tags/tag_pre.asp

您可以在服务器端通过 PHP trim() 您的字符串。

trim — 从开头去掉空格(或其他字符) 字符串结束

http://php.net/trim

PHP

<?php
  $str = trim($str);
  echo "<pre>$str</pre>";
?>

UPD

如果您无法访问服务器端,只需在客户端通过 JavaScript .trim() 方法进行。

$('<pre>' + str.trim() + '</pre>');

【讨论】:

  • 如果您投反对票,请提供反馈。
【解决方案5】:

先修剪文本左右的空格,然后在pre中输出修剪后的值。

【讨论】:

  • 我不能修改文本文件,而且文本的左边和右边没有空格,我不应该修改它
  • 您使用的是哪种服务器端语言?或者它只是编码文本..?
  • 正在使用服务器端 perl,但我无法访问服务器,我必须使用其他人创建的服务,所以我只能在 CSS 中处理它跨度>
  • 愿这种方式有效&lt;pre id="preVal"&gt; echo 1 &lt;/pre&gt; &lt;script type="text/javascript"&gt; var x = document.getElementById("preVal"); x.innerHTML = x.innerHTML.trim(); &lt;/script&gt;
猜你喜欢
  • 1970-01-01
  • 2016-09-14
  • 2016-07-05
  • 2012-01-17
  • 1970-01-01
  • 2015-01-23
  • 2011-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多