2

如何像在单引号字符串中一样回显换行符 \n?

$foo = 'foo';
$nl = getStringWithNewLineCharacter();
$bar = 'bar';

echo $foo . $nl . $bar;

将输出:

foo
bar

我想要的是:

foo\nbar

(显然,我不控制 getStringWithNewLineCharacter() 函数的返回值。)

或者换一种说法,如何强制将变量解释为单引号字符串?


编辑

虽然提供的答案提供了一种解决方法,但这里真正的问题是如何将双引号字符串变量解释为单引号字符串变量。也许不可能,我不知道。要回答这个问题,需要了解解释器如何管理字符串变量(我缺乏这一点)。

所以 :

  • 字符串的“引用类型”是如何定义的?
  • 它是不变的吗?
  • 有没有办法改变解释器管理字符串变量的方式?
4

5 回答 5

2

不完全确定这是您想要的,但无论如何都可以。

我认为您是在说您无法控制的返回值,getStringWithNewLineCharacter();并且您认为它正在返回,"\n"即换行符控制字符序列。

这将简单地转换"\n"'\n'

<?php

$foo = 'foo';
$nl = "\n";
$bar = 'bar';

echo $foo . $nl . $bar;   // 2 lines
echo PHP_EOL;

$nl = str_replace("\n", '\n', $nl);
echo $foo . $nl . $bar;   // one line
echo PHP_EOL;

结果:

foo
bar

foo\nbar

编辑:

或者,如果您想至少在此脚本期间使其永久化,请执行以下操作:-

$nl = str_replace("\n", '\n',getStringWithNewLineCharacter());
于 2016-09-21T08:35:48.097 回答
0
<?php
    $foo = 'foo';
    $nl = htmlspecialchars('\n');
    $bar = 'bar';

    echo $foo . $nl . $bar;
?>
于 2016-09-21T08:44:20.527 回答
0

你必须使用',而不是“',像这样 echo '\n'不是echo "\n"

于 2016-09-21T08:26:06.823 回答
0

只需避开反斜杠,即可中和其行为:

echo "foo\\nbar";

你可以用上面的文字方式或字符串替换命令来写,无论如何。结果是一样的:文字字符\n彼此相邻而不是换行符:

echo $foo . str_replace("\n", "\\n", $nl) . $bar;

或者很明显:

echo $foo . str_replace("\n", '\n', $nl) . $bar;
于 2016-09-21T08:30:02.550 回答
0

一旦“\n”字符在变量中,它就已经转换为换行符。您需要将其转换回来。

$nl = preg_replace("#\n#", '\n', $nl);
于 2016-09-21T08:30:32.013 回答