php explode foreach 奇怪的换行符

php explode foreach strange line breaks

我有一个文本区域,其中填充了 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>

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);

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

<?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>";