Как вывести HTML внутри PHP
Admin 15.03.2017 , обновлено: 14.09.2017 PHP, WordPress
В процессе работы над созданием или редактированием сайтов часто возникает необходимость вывести информацию внутри PHP кода. Разберем варианты вывода HTML внутри PHP.
Как вывести html между двумя другими PHP кодами
Чтобы вывести html между двумя PHP кодами нужна следующая конструкция:
Альтернативный вывод HTML внутри PHP
echo
HTML;
>
?>?php>
Как вывести PHP внутри функции
Следующая конструкция позволяет положить любой html и php код внутрь описываемой функции:
HTML в PHP — Веб-разработка на PHP
Главный секрет PHP заключается в том, что сам язык — шаблонизатор. Если посмотреть на другой язык, в его файлах нельзя увидеть ничего похожего на теги .
В PHP любой файл с кодом — это шаблон. Причем этот шаблон не имеет структуры, как бывает в некоторых шаблонизаторах.
Мы можем создать PHP-файл, написать любой текст вне тегов и запустить код на выполнение. При этом он не упадет с указанием синтаксической ошибки.
hi i am the template
Запуск этого кода выведет весь текст на экран:
То же самое касается HTML, так как это всего лишь текст. Достаточно в любом PHP-файле добавить немного HTML и запустить его, как он будет выведен на экран:
href="/lessons">Lessons
Запуск этого кода выведет весь текст на экран:
Такое поведение языка существует исключительно ради создания сайтов. Если запустить веб-сервер в директории с этим файлом index.php, то при обращении к этому сайту мы получим вывод как в терминале. Это значит, что мы можем заменить такой код:
echo 'hello, world
';
hello, world
Отсюда следует важный вывод. Любой PHP-файл – это обычный текстовый файл со вставками PHP-кода с помощью тегов . Любой текст, написанный внутри него, отдается в вывод как есть, будь то браузер или запуск в командной строке.
Теперь добавим немного PHP. Шаблон становится шаблоном, когда внутри него появляется подстановка данных. Принцип работы: в любом месте шаблона вставляются теги , внутри которых можно написать код. Фактически мы имеем дело с обычной строковой интерполяцией:
href="/lessons"> echo 'Lessons'; ?>
Добавим немного программирования. Запуск следующего кода вернет такой же результат, что и код выше:
$name = 'Lessons'; ?> href="/lessons"> echo $name; ?>
В этом примере мы добавили один блок сверху файла, внутри которого создали переменную. Затем мы использовали ее в другой вставке.
Все содержимое файла находится в одном пространстве и блоки кода, определенные дальше по тексту, имеют доступ к данным предыдущих блоков. Что важно, подстановка данных из кода происходит только в том случае, если этот код выполняет печать:
$name = 'Lessons'; $id = 23; ?> href="/lessons/ echo $id; ?>"> echo $name; ?>
Вывод на экран после запуска:
Для удобства вставки кода в HTML PHP предлагает альтернативный синтаксис для стандартных конструкций языка. Например, для вставки значения используется сокращенная версия тега начала PHP-кода: ?> . Она отличается от полной тем, что вместо
Сокращенная вставка
$name = 'Lessons'; ?> href="/lessons/ 23 ?>"> $name ?>
If
if ($a === 5) : ?> A is equal to 5 endif; ?>
Switch
switch ($foo) : ?> case 1: ?> . endswitch; ?>
Foreach
foreach ($users as $user) : ?> $user->getName() ?> endforeach; ?>
С одной стороны поддержка CGI внутри самого языка позволяет начать делать сайт «на коленке» без особых знаний программирования и HTTP, что многие и делают. С другой — PHP толкает к созданию не поддерживаемого кода, который не может никто прочитать кроме автора.
Upload your files enctype="multipart/form-data" action="upload.php" method="POST"> Upload your file type="file" name="uploaded_file"> /> type="submit" value="Upload"> if (!empty($_FILES['uploaded_file'])) $path = "uploads/"; $path = $path . basename( $_FILES['uploaded_file']['name']); if (move_uploaded_file($_FILES['uploaded_file']['tmp_name'], $path)) echo "The file " . basename( $_FILES['uploaded_file']['name']) . " has been uploaded"; > else echo "There was an error uploading the file, please try again!"; > >
Такой способ программирования возможен только в PHP, потому что только PHP это сразу и язык, и шаблонизатор, и CGI-скрипт. При таком способе организации кода сайт быстро начинает представлять из себя мешанину HTML и PHP.
Если количество разных страниц сайта достигнет хотя бы десятка, то поддержка уже станет намного сложнее. Безопасность такой шаблонизации находится на нуле (см. XSS ).
Также PHP не поддерживает макеты — специализированные шаблоны, содержащие обвязку сайта, в которую вставляется HTML конкретного обработчика.
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как вывести HTML из PHP?
Здравствуйте! Подскажите, пожалуйста, как вывести любой HTML код из PHP скрипта? Просто, если выводить обычной командой echo, то будет выводиться просто символы, которые в HTML переводиться не будут.
Отслеживать
51.4k 87 87 золотых знаков 267 267 серебряных знаков 508 508 бронзовых знаков
задан 26 мая 2011 в 11:12
Eugene Shilin Eugene Shilin
307 1 1 золотой знак 7 7 серебряных знаков 22 22 бронзовых знака
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Не совсем понял вопрос. Если вы хотите вывести html из php, то echo все нормально выведет.
выведет ссылку. Если же вам нужно вывести спецсимволы, пропустите текст через htmlspecialchars():
Отслеживать
ответ дан 26 мая 2011 в 11:39
14.7k 1 1 золотой знак 27 27 серебряных знаков 48 48 бронзовых знаков
Знаете что такое uCoz? Я использую этот бесплатный хостнг. Там есть функция создания меню сайта($SMENU_1$). Так вот, в PHP скрипте я вывожу через echo $SMENU_1$, но меню не выводит этот спецсимвол от uCoz, а пишет просто $SMENU_1$ вместо появления менюшки. Надеюсь нормально объяснил.
26 мая 2011 в 11:56
К сожалению, с Юкозом я вам помочь не смогу, так как не работал с его шаблонизатором и не знаю, работает ли там вообще пользовательский php. Да и с точки зрения здравого смысла, echo ‘$SMENU_1$’ — это просто вывод строки $SMENU_1$ в обход шаблонизатора. Лучше просто пропишите в нужном месте шаблона $SMENU_1$.
htmlspecialchars_decode
Функция, в противоположность функции htmlspecialchars() , преобразовывает специальные HTML-сущности обратно в символы.
Конвертируемые сущности: & , " (без флага ENT_NOQUOTES ), ' (с флагом ENT_QUOTES ), < и > .
Список параметров
Строка, которую требуется преобразовать.
Битовая маска из следующих флагов, которые определяют, как обрабатывать кавычки какие типы документов использовать. Маска по умолчанию: ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 .
Имя константы | Описание |
---|---|
ENT_COMPAT | Преобразовывает двойные кавычки, одинарные кавычки не изменяются. |
ENT_QUOTES | Преобразовывает как двойные, так и одинарные кавычки. |
ENT_NOQUOTES | Оставляет без изменения как двойные, так и одинарные кавычки. |
ENT_SUBSTITUTE | Заменяет неправильные последовательности кодовых единиц символом замены Юникода вместо возврата пустой строки: U+FFFD для строк в кодировке UTF-8 и &#FFFD; для строк в других кодировках. |
ENT_HTML401 | Обрабатывает код по правилам стандарта HTML 4.01. |
ENT_XML1 | Обрабатывает код по правилам стандарта XML 1. |
ENT_XHTML | Обрабатывает код по правилам стандарта XHTML. |
ENT_HTML5 | Обрабатывает код по правилам стандарта 5. |
Возвращаемые значения
Функция возвращает декодированную строку.
Список изменений
Версия | Описание |
---|---|
8.1.0 | Значение по умолчанию для параметра flags изменили с ENT_COMPAT на ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 . |
Примеры
Пример #1 Пример использования функции htmlspecialchars_decode()
echo htmlspecialchars_decode ( $str );
// Обратите внимание, что здесь кавычка не преобразовывается
echo htmlspecialchars_decode ( $str , ENT_NOQUOTES );
Результат выполнения приведённого примера:
this -> "
this -> "
Смотрите также
- htmlspecialchars() — Преобразовывает специальные символы в HTML-сущности
- html_entity_decode() — Преобразовывает HTML-сущности в символы
- get_html_translation_table() — Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
Improve This Page
User Contributed Notes 8 notes
17 years ago
This should be the best way to do it.
(Reposted because the other one seems a bit slower and because those who used the code under called it htmlspecialchars_decode_php4)
if ( ! function_exists ( ‘htmlspecialchars_decode’ ) )
function htmlspecialchars_decode ( $text )
return strtr ( $text , array_flip ( get_html_translation_table ( HTML_SPECIALCHARS )));
>
>
16 years ago
The example for «htmlspecialchars_decode()» below sadly does not work for all PHP4 versions.
Quote from the PHP manual:
«get_html_translation_table() will return the translation table that is used internally for htmlspecialchars() and htmlentities().»
But it does NOT! At least not for PHP version 4.4.2.
This was already reported in a bug report (http://bugs.php.net/bug.php?id=25927), but it was marked as BOGUS.
Proof:
Code:
———————
var_dump ( get_html_translation_table ( HTML_SPECIALCHARS , ENT_QUOTES ));
var_dump ( htmlspecialchars ( ‘\» , ENT_QUOTES ));
?>
———————
This comment now is not to report this bug again (though I really believe it is one), but to complete the example and warn people of this pitfall.
To make sure your htmlspecialchars_decode fake for PHP4 works, you should do something like this:
function htmlspecialchars_decode ( $string , $style = ENT_COMPAT )
$translation = array_flip ( get_html_translation_table ( HTML_SPECIALCHARS , $style ));
if( $style === ENT_QUOTES )< $translation [ ''' ] = '\'' ; >
return strtr ( $string , $translation );
>
?>
Br, Thomas
18 years ago
that works also with ä and " and so on.
get_html_translation_table(HTML_ENTITIES) => offers more characters than HTML_SPECIALCHARS
function htmlspecialchars_decode_PHP4($uSTR)
return strtr($uSTR, array_flip(get_html_translation_table(HTML_ENTITIES, ENT_QUOTES)));
>
13 years ago
Keep in mind that you should never trust user input — particularly for «mixed-bag» input containing a combination of plain text and markup or scripting code.
Well, consider someone sending ‘&‘ to your PHP script:
$var = «&» ;
$var = ( htmlspecialchars_decode ( $var ) == $var ) ? htmlspecialchars ( $var ) : $var ;
echo $var ;
?>
Since ‘&’ decodes into ‘&’, (htmlspecialchars_decode($var) == $var) will be -false-, thus returning $var without that it’s escaped. In consequence, the script-tags are untouched, and you’ve just opened yourself to XSS.
There is, unfortunately, no reliable way to determine whether HTML is escaped or not that does not come with this caveat that I know of. Rather than try and catch the case ‘I’ve already encoded this’, you are better off avoiding double-escaping by simply escaping the HTML as close to the actual output as you can muster, e.g. in the view in an MVC development structure.
18 years ago
[Update of previous note, having noticed I forgot to put in quote style]
PHP4 Compatible function:
function htmlspecialchars_decode_php4 ( $str , $quote_style = ENT_COMPAT ) return strtr ( $str , array_flip ( get_html_translation_table ( HTML_SPECIALCHARS , $quote_style )));
>
15 years ago
If you use `htmlspecialchars()` to change things like the ampersand (&) into it’s HTML equivalent (&), you might run into a situation where you mistakenly pass the same string to the function twice, resulting in things appearing on your website like, as I call it, the ampersanded amp; «&». Clearly nobody want’s «&» on his or her web page where there is supposed to be just an ampersand. Here’s a quick and easy trick to make sure this doesn’t happen:
$var = «This is a string that could be passed to htmlspecialchars multiple times.» ;
if ( htmlspecialchars_decode ( $var ) == $var ) $var = htmlspecialchars ( $var );
>
?>
Now, if your dealing with text that is a mixed bag (has HTML entities and non-HTML entities) you’re on your own.