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