Как я могу отобразить символ новой строки \ n, как если бы он был в одной строке кавычки?
$foo = 'foo';
$nl = getStringWithNewLineCharacter();
$bar = 'bar';
echo $foo . $nl . $bar;
будет выводить:
foo
bar
Что я хочу это:
foo\nbar
(Очевидно, я не контролирую возвращаемое значение функции getStringWithNewLineCharacter ().)
Или по-другому, как я могу заставить переменную интерпретировать как одну строку кавычки?
РЕДАКТИРОВАТЬ
Хотя предоставленные ответы дают обходной путь, реальный вопрос здесь заключается в том, как интерпретировать строковую переменную с двойными кавычками как строковую переменную с одинарными кавычками. Может быть, это невозможно, я не знаю. Чтобы ответить на это, требуется понимание того, как интерпретатор управляет строковыми переменными (чего мне не хватает).
Так :
Не совсем уверен, что это то, что вы хотите, но здесь все равно идет.
Я думаю, что вы говорите, что вы не можете контролировать возвращаемое значение 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;
?>