PHP - 将换行符“\n”作为单引号字符串回显
Posted
技术标签:
【中文标题】PHP - 将换行符“\\n”作为单引号字符串回显【英文标题】:PHP - Echo new line character "\n" as single quote stringPHP - 将换行符“\n”作为单引号字符串回显 【发布时间】:2016-09-21 08:22:30 【问题描述】:如何像在单引号字符串中一样回显换行符 \n?
$foo = 'foo';
$nl = getStringWithNewLineCharacter();
$bar = 'bar';
echo $foo . $nl . $bar;
将输出:
foo
bar
我想要的是:
foo\nbar
(很明显,我不控制getStringWithNewLineCharacter()函数的返回值。)
或者换一种说法,如何强制将变量解释为单引号字符串?
编辑
虽然提供的答案提供了一种解决方法,但这里真正的问题是如何将双引号字符串变量解释为单引号字符串变量。也许不可能,我不知道。要回答这个问题,需要了解解释器如何管理字符串变量(我缺乏)。
所以:
如何定义字符串的“引用类型”? 它是不可变的吗? 有没有办法改变解释器管理字符串变量的方式?【问题讨论】:
为什么单引号字符串不是一个选项。这似乎是最简单的方法。 在\
前面加上 \n
是否可以转义 \\n
您是说您不希望 \n
成为换行符控制字符,而只是 2 个字符的文本
@RiggsFolly 是的
几个人似乎无法阅读这个问题,只是告诉你如何阻止\n
被解释为一个新行。这不是真正的要求。 OP 显然已经知道这一点。
【参考方案1】:
不完全确定这是您想要的,但无论如何都可以。
我认为您是说您无法控制 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());
【讨论】:
确实有效,谢谢。但这意味着每次都使用 str_replace 非常乏味。难道没有像一些类似铸造的操作这样更简单的方法吗? 查看编辑建议 事实上我的脚本中有数百个这样的变量,所以在回声或连接过程中使用类似强制转换的技巧会很好。如何告诉解释器将变量用作单引号字符串而不是双引号字符串?但也许这是不可能的,idk。【参考方案2】:您必须使用 ',而不是 "',例如 echo '\n'
而不是 echo "\n"
【讨论】:
这与 OP 刚刚问的相反!【参考方案3】:只需转义反斜杠,即可中和其行为:
echo "foo\\nbar";
你可以用上面的文字方式或字符串替换命令来写,无论如何。结果是一样的:文字字符 \
和 n
彼此相邻,而不是换行符:
echo $foo . str_replace("\n", "\\n", $nl) . $bar;
或者显然:
echo $foo . str_replace("\n", '\n', $nl) . $bar;
【讨论】:
【参考方案4】:一旦“\n”字符在变量中,它已经转换为换行符。您需要将其转换回来。
$nl = preg_replace("#\n#", '\n', $nl);
【讨论】:
或者为了简单起见$nl = str_replace("\n", '\n', $nl);
那也不错。我倾向于默认使用 RegEx。与我的 Perl 起源有关 :-)【参考方案5】:
<?php
$foo = 'foo';
$nl = htmlspecialchars('\n');
$bar = 'bar';
echo $foo . $nl . $bar;
?>
【讨论】:
以上是关于PHP - 将换行符“\n”作为单引号字符串回显的主要内容,如果未能解决你的问题,请参考以下文章