【问题标题】:php explode foreach strange line breaksphp爆炸foreach奇怪的换行符
【发布时间】:2016-10-26 01:12:35
【问题描述】:

我有一个 textarea 填充了颜色代码,如 000000ffffff 每种颜色都在单独的行上,所以看起来像:

000000
111111
222222

现在我将这些转换为实际的内联背景颜色:

$bgclass = $params->get('bgclass');
$bgcolors = $params->get('bgcolors');

$bglines = explode("\n", $bgcolors);
if ( !empty($bglines) ) {
  echo "<style>";
  foreach ( $bglines as $bgline ) {
    echo "." . $bgclass . "-" . $bgline . "{background:#" . $bgline . ";}" . "\r\n";
  }
  echo "</style>";
}

现在输出如下:

<style>
.bg-000000
{background:#000000
;}
.bg-111111
{background:#111111
;}
.bg-222222
{background:#222222
;}
</style>

我怎样才能得到这样的输出:

<style>
.bg-000000{background:#000000;}
.bg-111111{background:#111111;}
.bg-222222{background:#222222;}
</style>

【问题讨论】:

  • trim 你的值来自 foreach。所以他们不再有新行了。
  • explode \r\n
  • @Rizier123 我尝试了你所说的并做到了echo "." . $bgclass . "-" . trim($bgline) . "{background:#" . trim($bgline) . ";}" . "\r\n"; 效果很好。非常感谢。你能把它变成一个答案吗?
  • @AbraCadaver 我不知道该怎么做?我应该这样做:$bglines = explode("\r\n", $bgcolors);
  • @AbraCadaver 我的错我打错了,这就是为什么它给出了一个错误/t/n 不会删掉它。 :-) 使用/r/n 就像你说的那样它正在工作。谢啦。那么最好的做法是什么?什么是最佳实践?你能在答案中也做到这一点吗?

标签: php foreach explode line-breaks


【解决方案1】:

我不确定您发布的方法有什么问题,但这可能会对您有所帮助。

<?php
$bglines = explode(PHP_EOL, $bgcolors);
$styles = [];
foreach($bglines as $bgline) {
$trimmed = trim($bgline);
    $styles[] = sprintf(".%s-%s{background : #%s;}%s", $bgclass, $trimmed, $trimmed, PHP_EOL);
}
echo "<style>" . implode($styles) . "</style>";

【讨论】:

  • 您好,感谢您的回复。我不确定你在这里做什么。它可能很好用,但我看不懂。这不是你的错,但我没有使用它。
  • 老实说我不知道​​ :) 尝试刷新看看。
【解决方案2】:

只需将explode() 改为\r\n

$bglines = explode("\r\n", $bgcolors);

另一个选择是trim()它:

$bglines = explode("\n", $bgcolors);
$bglines = array_map('trim', $bglines);

如果这是一个文件(如我最初所想的那样),那么我将使用 file() 将文件读入一个数组并去除行尾:

$bglines = file('/path/to/file.txt', FILE_IGNORE_NEW_LINES);

【讨论】:

  • 我没有文件。不知道你从哪里得到的?但仍然非常有用的信息要知道。谢啦。但尤其是 \r\n 部分非常出色,这就是它对我有用的原因。
  • 第三种选择是简单地str_replace("\r\n", "\n", $str),然后只是explode("\n", $str),然后您不必担心使用哪个行尾或修剪掉错过的\rs,。
猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2020-03-01
  • 2011-10-26
  • 2021-12-19
  • 1970-01-01
  • 2015-04-21
  • 2016-12-04
相关资源
最近更新 更多