PHP: Экранирующие последовательности
Допустим, мы хотим вывести текст ниже в две строчки:
- Are you hungry?
- Aaaarrrgh!Если мы просто передадим этот текст в print_r(), то PHP напечатает все в одну строчку. Технически можно написать два подряд идущих print_r(), но представим, что мы хотим это сделать с помощью одного:
<?php
print_r("- Are you hungry?- Aaaarrrgh!");
// => - Are you hungry?- Aaaarrrgh!Чтобы каждая из них начиналась с новой строки, нужно добавить перевод строки, то есть «нажать Enter». В программировании это реализуется через добавление специальных символов, в данном случае \n. Да, это не опечатка. Несмотря на то, что мы видим здесь два символа, с точки зрения PHP это один символ:
<?php
print_r("- Are you hungry?\n- Aaaarrrgh!");Результат будет таким:
- Are you hungry?
- Aaaarrrgh!Что такое \n?
\n является управляющей последовательностью (англ. escape sequence, иногда говорят «экранированная последовательность»). Она обозначает перевод строки, но не отображается напрямую. Вы не увидите \n в выводе программы, так как она влияет только на расположение текста.
В текстовых редакторах при нажатии Enter добавляется невидимый символ LF (Line Feed). Именно его и означает \n. Иногда такие символы можно увидеть, если включить отображение спецсимволов:
- Привет!¶
- О, привет!¶
- Как дела?Принтеры, редакторы и интерпретатор PHP понимают \n как команду начать текст с новой строки.
Важная особенность PHP: управляющие последовательности вроде \n работают только внутри двойных кавычек. В одинарных кавычках \n — это просто два обычных символа, \ и n:
<?php
print_r("Hello\nWorld");
// Hello
// World
print_r('Hello\nWorld');
// => Hello\nWorldПримеры использования \n
Вот как PHP обрабатывает управляющую последовательность \n:
В коде "Hello\nWorld"
↓
На экране Hello
WorldМестоположение \n меняет итоговый вывод:
<?php
print_r("Hello\nWorld");
// Hello
// World
print_r("Hello \nWorld");
// Hello
// World (в конце первой строки есть пробел)
print_r("Hello\n World");
// Hello
// World (во второй строке в начале пробел)
print_r("Hello\n\nWorld");
// Hello
//
// World (пустая строка между ними)Пробелы до или после \n также учитываются. PHP воспринимает их как обычные символы и отображает в выводе.
Вы также можете вставлять \n в любую часть строки — до, после или даже использовать отдельно:
<?php
print_r("First line\n");
print_r("\n"); // Просто пустая строчка
print_r("Second line");Результат будет таким:
First line
Second lineКак вывести сам символ \n
\n в PHP является управляющей последовательностью. Она управляет расположением текста и не выводится на экран как обычные символы. Если вам нужно вывести именно символы \ и n, а не перевод строки, их нужно экранировать. Для этого перед обратным слешем добавляют еще один слеш:
<?php
print_r("Hello\\nWorld");
// => Hello\nWorld
// Если забыть указать второй слеш
print_r("Hello\nWorld");
// Hello
// WorldВ этом случае PHP понимает \\ как обычный обратный слеш и показывает строку без перевода строки.
Другие управляющие последовательности
Кроме \n, в PHP есть и другие управляющие последовательности:
\tобозначает табуляцию (эквивалент клавиши Tab)\rобозначает возврат каретки (используется в Windows, но редко применяется в PHP-коде)- В программировании чаще всего используют именно
\n, его достаточно для большинства задач
Важные детали
\nявляется одним символом, несмотря на то, что в коде он записан как два (\иn)- Управляющие последовательности в PHP работают только внутри двойных кавычек
- На Windows по умолчанию используется комбинация
\r\n, но в кроссплатформенной разработке принято использовать только\n, чтобы избежать проблем при переносе кода между системами. Поэтому стоит настроить свой редактор на использование\n
Задание
Вы пишете программу, которая показывает пользователю подсказку о том, как разбить текст на строки. Выведите подсказку одним вызовом print_r():
Для разделения строк используйте "\n"
Пример: print_r("строка1\nстрока2")Обратите внимание: \n в первой строке — это буквальный текст, а не перевод строки.
Полезное
PHP: Экранирующие последовательности
Допустим, мы хотим вывести текст ниже в две строчки:
- Are you hungry?
- Aaaarrrgh!Если мы просто передадим этот текст в print_r(), то PHP напечатает все в одну строчку. Технически можно написать два подряд идущих print_r(), но представим, что мы хотим это сделать с помощью одного:
<?php
print_r("- Are you hungry?- Aaaarrrgh!");
// => - Are you hungry?- Aaaarrrgh!Чтобы каждая из них начиналась с новой строки, нужно добавить перевод строки, то есть «нажать Enter». В программировании это реализуется через добавление специальных символов, в данном случае \n. Да, это не опечатка. Несмотря на то, что мы видим здесь два символа, с точки зрения PHP это один символ:
<?php
print_r("- Are you hungry?\n- Aaaarrrgh!");Результат будет таким:
- Are you hungry?
- Aaaarrrgh!Что такое \n?
\n является управляющей последовательностью (англ. escape sequence, иногда говорят «экранированная последовательность»). Она обозначает перевод строки, но не отображается напрямую. Вы не увидите \n в выводе программы, так как она влияет только на расположение текста.
В текстовых редакторах при нажатии Enter добавляется невидимый символ LF (Line Feed). Именно его и означает \n. Иногда такие символы можно увидеть, если включить отображение спецсимволов:
- Привет!¶
- О, привет!¶
- Как дела?Принтеры, редакторы и интерпретатор PHP понимают \n как команду начать текст с новой строки.
Важная особенность PHP: управляющие последовательности вроде \n работают только внутри двойных кавычек. В одинарных кавычках \n — это просто два обычных символа, \ и n:
<?php
print_r("Hello\nWorld");
// Hello
// World
print_r('Hello\nWorld');
// => Hello\nWorldПримеры использования \n
Вот как PHP обрабатывает управляющую последовательность \n:
В коде "Hello\nWorld"
↓
На экране Hello
WorldМестоположение \n меняет итоговый вывод:
<?php
print_r("Hello\nWorld");
// Hello
// World
print_r("Hello \nWorld");
// Hello
// World (в конце первой строки есть пробел)
print_r("Hello\n World");
// Hello
// World (во второй строке в начале пробел)
print_r("Hello\n\nWorld");
// Hello
//
// World (пустая строка между ними)Пробелы до или после \n также учитываются. PHP воспринимает их как обычные символы и отображает в выводе.
Вы также можете вставлять \n в любую часть строки — до, после или даже использовать отдельно:
<?php
print_r("First line\n");
print_r("\n"); // Просто пустая строчка
print_r("Second line");Результат будет таким:
First line
Second lineКак вывести сам символ \n
\n в PHP является управляющей последовательностью. Она управляет расположением текста и не выводится на экран как обычные символы. Если вам нужно вывести именно символы \ и n, а не перевод строки, их нужно экранировать. Для этого перед обратным слешем добавляют еще один слеш:
<?php
print_r("Hello\\nWorld");
// => Hello\nWorld
// Если забыть указать второй слеш
print_r("Hello\nWorld");
// Hello
// WorldВ этом случае PHP понимает \\ как обычный обратный слеш и показывает строку без перевода строки.
Другие управляющие последовательности
Кроме \n, в PHP есть и другие управляющие последовательности:
\tобозначает табуляцию (эквивалент клавиши Tab)\rобозначает возврат каретки (используется в Windows, но редко применяется в PHP-коде)- В программировании чаще всего используют именно
\n, его достаточно для большинства задач
Важные детали
\nявляется одним символом, несмотря на то, что в коде он записан как два (\иn)- Управляющие последовательности в PHP работают только внутри двойных кавычек
- На Windows по умолчанию используется комбинация
\r\n, но в кроссплатформенной разработке принято использовать только\n, чтобы избежать проблем при переносе кода между системами. Поэтому стоит настроить свой редактор на использование\n
Задание
Вы пишете программу, которая показывает пользователю подсказку о том, как разбить текст на строки. Выведите подсказку одним вызовом print_r():
Для разделения строк используйте "\n"
Пример: print_r("строка1\nстрока2")Обратите внимание: \n в первой строке — это буквальный текст, а не перевод строки.
Полезное
Ваше упражнение проверяется по этим тестам
<?php
namespace HexletBasics\Strings\EscapeCharacters;
use HexletBasics\Exercise\TestCase;
class SolutionTest extends TestCase
{
public function test()
{
$expected = "Для разделения строк используйте \"\\n\"\nПример: print_r(\"строка1\\nстрока2\")";
$this->assertOutput($expected);
}
}Решение учителя откроется через:
20:00
