﻿<p class=text>Вообще говоря, эта функция относится к функциям преобразования символов, о которых мы тоже будем говорить в этой главе. Эту функцию мы вынесли в самое начало из-за того, что она делает одну простую, но важную вещь – производит преобразование спецсимволов в их HTML эквиваленты. Попросту говоря, эта функция гарантирует, что если Вы вдруг вздумаете написать в гостевой книге или на форуме какой-то код (php, javascript и т.д.) он отобразиться совершенно нормально, но выполняться не будет! Т.е. функцию надо применять, если нужно вывести в броузере какой-то код. Кроме того, эта функция избавляет Вас от всяких кретинов, которым нечем заняться кроме как писать в Ваших гостевых книгах (и любых формах ввода) какие либо скрипты. Ну а теперь, собственно, о функции.</p>
<p class=text><b><i>Синтаксис:</i></b></p>
<blockquote><pre>
string <b>htmlspecialchars</b><em class=gr>(</em>string <b>str</b> [, int <b>quote_style</b> [, string <b>charset</b>]]<em class=gr>)</em>;
</pre></blockquote>
<p class=text>Первый аргумент – строка, в которой надо выполнить преобразование. В качестве второго необязательного аргумента принимается одна из двух констант: ENT_QUOTES или ENT_QUOTES. Первая константа передается если надо транслировать кавычки, а вторая, если этого делать не надо. Третий необязательный аргумент принимает строку, представляющую набор символов, используемых в преобразовании (по умолчанию ISO-8859-1).</p>
<p class=text>К примеру, если Вы обрабатываете какое-то сообщение <b>$msg</b> формы, то обработка его функцией <b>htmlspecialchars()</b> возможна следующим образом:</p>
<blockquote><pre>
<b>$msg</b> = <b>htmlspecialchars</b><em class=gr>(</em><b>$msg</b><em class=gr>)</em>;
</pre></blockquote> 
<p class=text>Как видите, все просто.</p>
<p class=text>А для того, чтобы у Вас все это хорошенько запомнилось приведем такой поучительный примерчик, который, надеемся, заставит Вас не забывать об этой функции.</p>
<p class=text>Давайте напишем примитивный php скриптик, который будет отображать данные, вводимые в форме.</p>
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$action</b> = <b>$HTTP_POST_VARS</b>["action"];
   <em class=gr>if (</em> empty(<b>$action</b><em class=gr>) )
   {</em>
   <em class=red>?&gt;</em>
      &lt;<b>HTML</b>>
      &lt;<b>HEAD</b>>
      &lt;<b>TITLE</b>>Примерчик&lt;/<b>TITLE</b>>
      &lt;/<b>HEAD</b>>
      &lt;<b>BODY</b>>
      &lt;<b>center</b>>
      &lt;<b>table</b> width=1 border=0>
      &lt;<b>form</b> action=test1.php method=post>
         &lt;<b>input</b> type=hidden name=action value=post>
         &lt;<b>tr</b>>&lt;<b>td</b> colspan=2>Сообщение&lt;<b>br</b>>&lt;<b>textarea</b> cols=50 rows=8 name=msg>
         <em class=red>&lt;?</em> <em class=gr>echo</em> <b>$msg</b>; <em class=red>?&gt;</em>
         &lt;/<b>textarea</b>>&lt;/<b>td</b>>&lt;/<b>tr</b>>
         &lt;<b>tr</b>>&lt;<b>td</b> colspan=2>&lt;<b>input</b> type=submit value='Добавить'>&lt;/<b>td</b>>&lt;/<b>tr</b>>
      &lt;/<b>form</b>>
      &lt;/<b>table</b>>
      &lt;/<b>center</b>>
      &lt;/<b>BODY</b>>
      &lt;/<b>HTML</b>>
   <em class=red>&lt;?</em>
   <em class=gr>}</em>
<em class=red>?&gt;</em>
</pre></blockquote>
<p class=text>Ничего сложного, просто форма для ввода сообщения. Выводится и обрабатывается введенное сообщение файлом, указанным action’е формы (test1.php). Код, написанный в этом файле тоже прост:</p>
 
<blockquote><pre>
<em class=red>&lt;?</em>
   <b>$msg</b> = <b>substr</b><em class=gr>(</em><b>$HTTP_POST_VARS</b>["msg"],0,1024<em class=gr>)</em>;
   <b>$msg</b> = <b>htmlspecialchars</b><em class=gr>(</em><b>$msg</b><em class=gr>)</em>;
   <em class=gr>print</em> &quot;&lt;P>&quot;.<b>$msg</b>.&quot;&lt;/P>\n";
<em class=red>?&gt;</em>
</pre></blockquote>

<p class=text>Вроде как все понятно. Выделяем из переменной <b>$HTTP_POST_VARS</b> сообщение (о функции <b>substr</b>() смотрите чуть ниже), обрабатываем это сообщение функцией <b>htmlspecialchars</b>() и выводим.</p>
<p class=text>А теперь давайте немного пошутим, и введем в форму для вода сообщения вместо безобидного текста вот такой javascript-код (пока тоже безобидный):</p>
<blockquote><pre>
&lt;<b>Script</b> Language="JavaScript">
   <b>alert</b>("Приветик!"); // <em class=comnt>функция вывода в JavaScript</em>
&lt;/<b>Script</b>>
</pre></blockquote>
<p class=text>Т.е. наша форма примет следующий вид:</p>
<img src="images/gl3_1.gif" tppabs="http://site/bookphp/images/gl3_1.gif" border="0" width="340" height="181" alt="">

<p class=text>В случае, если при обработке сообщения мы использовали эту чудо-функцию, ничего страшного не произойдет и мы просто увидим текст, который набрали:</p>
<img src="images/gl3_2.gif" tppabs="http://site/bookphp/images/gl3_2.gif" border="0" width="399" height="90" alt=""><br clear="all">
<p>&lt;Script Language="JavaScript">alert("Приветик!");&lt;/Script>

<p class=text>А вот если, мы не обработали сообщение функцией <b>htmlspecialchars</b>() (закомментарьте строку <b>$msg</b> <em class=gr>=</em> <b>htmlspecialchars</b><em class=gr>(</em>$<b>msg</b><em class=gr>)</em>; в test1.php), то мы увидим уже не текст скрипта, а результат его выполнения:</p>
<img src="images/gl3_3.gif" tppabs="http://site/bookphp/images/gl3_3.gif" border="0" width="212" height="126" alt="">
<p class=text>Как понимаете, &quot;приветик&quot; может быть совсем не таким безобидным.</p>