我如何回显新的行字符'n,如果它是在一个单引号字符串?
$foo = 'foo';
$nl = getStringWithNewLineCharacter();
$bar = 'bar';
echo $foo . $nl . $bar;
将输出:
foo
bar
我要的是:
foo'nbar
(显然,我没有控制getstringwithnewlineccharacter()函数的返回值。)
或者换句话说,我如何强制将变量解释为单引号字符串?
编辑
虽然提供的答案给出了一个变通方法,但这里真正的问题是如何将双引号字符串变量解释为单引号字符串变量。也许这是不可能的,我不知道。要回答这个问题,需要理解解释器是如何管理字符串变量的(这是我所缺乏的)。
:
- 如何定义字符串的"引用类型"?
- 是不可变的吗?
- 是否有办法改变解释器将如何管理字符串变量?
我不太确定这是你想要的,但不管怎样,这就是。
我想你是说你无法控制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());
你必须使用',而不是',像echo ''n'
而不是echo "'n"
只是转义反斜杠,这抵消了它的行为:
echo "foo''nbar";
你可以像上面那样用字面量的方式或者用字符串替换命令来写,等等。结果是相同的:文字字符'
和n
彼此相邻,而不是换行字符:
echo $foo . str_replace("'n", "''n", $nl) . $bar;
或者显然:
echo $foo . str_replace("'n", ''n', $nl) . $bar;
一旦"'n"字符在变量中,它已经被转换为换行符。您需要将其转换回来。
$nl = preg_replace("#'n#", ''n', $nl);
<?php
$foo = 'foo';
$nl = htmlspecialchars(''n');
$bar = 'bar';
echo $foo . $nl . $bar;
?>