Skip to content

Всё для WordPress, веб-разработки — и не только

HTML в PHP: echo, heredoc, nowdoc и выход из PHP

HTML в PHP: echo, heredoc, nowdoc и выход из PHP

Вставьте готовую разметку — получите пять вариантов того, как положить её в PHP-файл, с правильным экранированием для каждого. Всё выполняется в вашем браузере: разметка никуда не отправляется и нигде не сохраняется.

Перетащите сюда .html — файл читается локально.
Обработка разметки

Ближе всего к тому, что выдаёт codebeautify, но с экранированием: без него любой апостроф в разметке ломает строку PHP.

Вставьте HTML выше — код PHP появится здесь.

Разметка не покидает ваш браузер — преобразование выполняется локально, без отправки на сервер.

Пять способов и когда какой уместен

echo построчно — строка за строкой, каждая отдельным вызовом. Самый привычный вид, удобный, когда между строками надо вставить условие или цикл. nowdoc — блок, в котором PHP не интерпретирует ничего: ни escape-последовательностей, ни переменных. Разметка ложится в код байт в байт, экранировать не нужно вообще. Это самый безопасный способ перенести чужой HTML. heredoc — тот же блок, но с переменными: $title внутри подставится. Поэтому знак доллара и обратный слеш экранируются, а кавычки — нет. Строка в переменной — разметка собирается в $html конкатенацией. Нужно, когда её надо вернуть из функции или передать в шаблонизатор, а не вывести сразу. Выход из PHP — закрыть тег и отдать разметку как есть. Именно это советует документация PHP: никакого экранирования, никаких затрат на склейку строк, а подсветка синтаксиса в редакторе остаётся рабочей. Закрывающего тега ?> в сгенерированном коде нет намеренно. Любой символ после него — даже случайный перенос строки в конце файла — попадает в вывод и даёт классическое «headers already sent».

Почему конвертеры без экранирования дают неработоспособный код

Самый распространённый онлайн-конвертер HTML в PHP делает ровно одно: разрезает текст по строкам и склеивает echo '<строка>';. Никакой замены символов там нет, и это видно на первом же реальном куске разметки. Атрибут в одинарных кавычках — <a href='/price'> — закрывает строку PHP посреди текста. Дальше идёт синтаксическая ошибка. Обратный слеш в конце строки съедает закрывающую кавычку и склеивает две строки в одну. Знак доллара в двойных кавычках или heredoc превращает $total в пустое значение. trim() на каждой строке молча срезает отступы внутри pre, textarea и code — на странице меняется то, что видит посетитель. Все строки склеиваются без переносов, поэтому исходный HTML становится одной бесконечной строкой. Здесь каждый из этих случаев обработан, а метка heredoc подбирается так, чтобы не совпасть ни с одной строкой вашей разметки: иначе блок закрылся бы посередине.

Частые вопросы