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 добирається так, щоб не збігтися з жодним рядком вашої розмітки: інакше блок закрився б посередині.

Часті питання