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 | Обрабатывать код как HTML 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
User Contributed Notes 8 notes
15 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)));
>
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 )));
>
>
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.
14 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.
Как вывести 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 код ТЕКСТОМ?
Я рекомендовал с позиции что проще оборачивать «угловые скобки» в спан чем запоминать шифры «сущностей», при этом код не теряет в читабельности как с «сущностями».
18 июл 2018 в 3:40
Это может быть и проще, но 1. плодит лишний код; 2. получаем невалидный код; который может выводиться в браузер либо как мы ожидаем либо с ошибками
18 июл 2018 в 4:55
1) На PHP можно функцию выше использовать, но на голом HTML предложенный код, помогающий решить задачу не может стать лишним. 2) Едва ли тег созданный для оформления текста, может повлиять на валидность при его использовании для оформления текста.
23 июл 2018 в 8:25
Тег не влияет. На валидность влияет наличие неэкранированных знаков < , >и & и единственно правильный метод их экранирования в html — замена на сущности
PHP: Вывод текста
В PHP есть два основных способа вывода данных: echo и print .
echo и print в принципе делают одно и то же — выводят данные на экран, но всё же имеют и некоторые отличия друг от друга. echo не имеет возвращаемого значения и может принимать несколько аргументов. print при использовании возвращает 1, поэтому может быть использован в выражениях, и принимает только один аргумент.
echo
Обратите внимание, что echo можно писать двумя способами с круглыми скобками и без них: echo или echo() . Если вы используете синтаксис с круглыми скобками, то передать можно только один аргумент. При использовании синтаксиса без скобок, можно передавать несколько аргументов, разделяя их запятыми.
Следующий пример показывает, как выводить текст с помощью echo. Обратите внимание, что текст может содержать HTML разметку.
PHP это легко!"; echo "Сейчас я изучаю PHP!
"; echo "Эта ", "строка ", "была ", "сделана", " из нескольких аргументов."; ?>
Теперь рассмотрим вывод текста вместе с переменным:
$txt1"; echo "Сейчас я изучаю PHP на $txt2
"; echo $x + $y; ?>
print , так же как и echo можно писать в двух вариантах (со скобками и без них): print или print() . Но в отличие от echo , какой бы вариант написания вы ни выбрали, print может принять только один аргумент.
Следующий пример показывает, как выводить текст с помощью print . Обратите внимание, что текст может содержать HTML разметку.
PHP это легко!"; print "Сейчас я изучаю PHP!
"; print "И мне это нравится."; ?>
Теперь рассмотрим вывод текста вместе с переменным:
$txt1"; print "Сейчас я изучаю PHP на $txt2
"; print $x + $y; ?>
Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011 – 2024 © puzzleweb.ru | razumnikum.ru