Вы здесь: Главная > Основы разработки сайта > Основы PHP > 45 урок - Функция htmlspecialchars - преобразуем специальные символы в HTML-сущности

Основы PHP

45 урок - Функция htmlspecialchars - преобразуем специальные символы в HTML-сущности

Функция htmlspecialchars -  функция выполняют очень важную работу, она преобразует специальные символы в HTML-сущности. 

Что вообще такое  HTML-сущности? Это специальные символы типа: < > » '  и т. д.

Зачем нужно их преобразования? Давайте рассмотрим пример. У вас есть гостевая книга в которой любой пользователь может оставить запись. А что будет если он оставит не просто запись, а какой либо скрипт или специальный хакерский код? Ваш сайт будет испорчен. Возможно он не будет взломан, но он будет сто процентов испорчен. Дак вот смысл этой функции все скрипты преобразовать в неработоспособное состояние.

 Синтаксис функции:

 
htmlspecialchars ( входная строка, [flags - название константы ]  )
 

Константы бывают:

ENT_COMPAT - Преобразует двойные кавычки, одинарные кавычки не изменяются.

ENT_QUOTES - Преобразует как двойные, так и одинарные кавычки.

ENT_NOQUOTES - Оставляет без изменения как двойные, так и одинарные кавычки.

ENT_IGNORE - Молча отбрасывает некорректные кодовые последовательности вместо возврата пустой строки. Данная возможность предоставляется в целях обратной совместимости, избегайте ее использования, т.к. она может внести уязвимости в ваш код.

ENT_SUBSTITUTE - Заменяет некорреткные кодовые последовательности символом замены Юникода U+FFFD в случае использования UTF-8 и &#FFFD; при использовании другой кодировки, вместо возврата пустой строки.

ENT_DISALLOWED - Заменяет кодовые последовательности, несоответствующие указанному типу документа символом замены Юникода U+FFFD в случае использования UTF-8 и &#FFFD; при использовании другой кодировки.

ENT_HTML401 - Обработка кода в соответствии с HTML 4.01.

ENT_XML1 - Обработка кода в соответствии с XML 1.

ENT_XHTML - Обработка кода в соответствии с XHTML.

ENT_HTML5 - Обработка кода в соответствии с HTML 5.

 

Важный момент, если параметр не указать, то по-умолчанию будет ENT_COMPAT

ENT_IGNORE — работает начиная с php 5.3

ENT_SUBSTITUTE, ENT_DISALLOWED, ENT_HTML401, ENT_XML1, ENT_XHTML и ENT_HTML5 — работают начиная с php 5.4

В основном на всех серверах стоит php 5.2 ил 5.3 , но то что введено позже Вам врядли понадобятся.

Рассмотрим функцию на примере:

<?php
 $new = htmlspecialchars("<a href='url'>Test</a>", ENT_QUOTES);
// &lt;a href=&#039;url&#039;&gt;Test&lt;/a&gt;
echo $new;
?>

Заметьте что в браузере выдаст:

 
 <a href='url'>Test</a> 
 

А если вы посмотрите HTML-код страницы, то увидите:

 
 &lt;a href=&#039;url&#039;&gt;Test&lt;/a&gt;
 

Если без использования функции выведете обычную ссылку. Можете попробовать.

Еще один важный момент функция работает с:

  •  & (амперсанд) преобразуется в '&amp;'
  • « (двойная кавычка) преобразуется в '&quot;' в режиме ENT_NOQUOTES is not set.
  • ' (одиночная кавычка) преобразуется в '&#039;' только в режиме ENT_QUOTES.
  • < (знак "меньше чем") преобразуется в '&lt;'
  • > (знак "больше чем") преобразуется в '&gt;'

Если вам нужно преобразовать все возможные сущности, надо использовать функцию htmlentities(). О ней мы поговорим в следующем уроке.