Гостевая книга
В РНР третьей (начиная с подверсии 3.0.17) и четвертой (начиная с подверсии 4.0.3) версий в качестве второго аргумента можно также указать параметр ENTjQUOTES или ENTNOQUOTES. Если указан первый, то помимо вышеуказанных замен выполняется еще и замена символа ' (одинарной кавычки) на сочетание символов ', а если указан второй – то никакие кавычки не заменяются.
В результате все тэги будут отображаться на экране точно так же, как при их вводе в поле ввода сообщения – т. е. не станут обрабатываться браузером или интерпретатором РНР.
Комментарий
Любую информацию, запрашиваемую от посетителя и впоследствии выводимую на какую-либо страницу, весьма желательно перед выводом обработать какой-нибудь из этих функций, htmlspecialchars или strip_tags, – для обеспечения устойчивости сайта к взлому. Ибо даже в том случае, если вы на одной странице запрашиваете у посетителя e-mail, а на другой – его выводите на страницу, злоумышленник в поле ввода e-mail'a может поместить код на РНР, и тогда, будучи включенным в выведенную страницу без какой-либо обработки, этот код благополучно исполнится! А ведь в этом коде может быть что угодно – вплоть до команд удаления файлов. Поэтому не забывайте обрабатывать данными функциями все информацию, что была введена в элементы формы и будет отображаться на какой-либо странице.
Даже скрытые поля и выпадающие списки могут нести в себе угрозу безопасности сайта – если получаемая из них информация выводится на экран. Ничто не мешает злоумышленнику сделать локальную копию страницы с формой на своем жестком диске, прописать в качестве страницы-обработчика полный путь к ней – вместе с адресом сайта и изменить в форме содержимое любых полей, в том числе и скрытых, поместив туда PHP-код. Так что будьте бдительны!
Если Вы желаете, чтобы при отображении на странице сообщений сохранялась их разбивка отправителями на абзацы, то обработайте записываемое в файл сообщение командой nl2br для конвертации символов конца строки в тэги <br>, которые этот разрыв строки и означают:
fwrite($hdl,nl2br(strip_tags($otziv)));
…или, если хотите, запишите все команды обработки записываемого сообщения в две строки:
$otziv=nl2br(strip_tags($otziv)); fwrite($hdl,$otziv);
Примечание
Функция nl2bг (строка) вставляет перед каждым символом начала строки, встреченном в строке в ее параметре, тэг <br> – в РНР версии до 4.0.5, или <br /> – в РНР более поздних версий. (Последний тэг совместим и с языком XML.)
Файл можно закрыть – и закончить сценарий.
fclose($hdl); ?>
Такой код будет работать в РНР версии 3. В РНР версии 4 и выше с этим кодом тоже проблем не будет, однако лишь в том случае, если в конфигурационном файле РНР установлена как on опция register_globals. Настройка данного файла – прерогатива администратора web-сервера (хотя по умолчанию данная опция включена). Если register_globals установить в off, то переменные формы по их именам в сценарии-обработчике доступны не будут.
Однако все переменные, передающиеся через форму, записываются еще и в специальный массив – с именем $HTTP_POST_VARS (если передача произведена методом post – т. е. в адресной строке значения передаваемых переменных не отображаются; вид передачи указывается в заголовке формы) или $HTTP_GET_VARS (если передача произведена методом get – с отображением в адресной строке передаваемых переменных). В РНР4 так происходит всегда, а в РНРЗ – только в том случае, если в конфигурационном файле РНР (настраиваемом администратором web-сервера) установлена как on опция track_vars. Элементы этих массивов названы именами этих переменных; так, переменная, указанная в поле с именем otziv формы, передающей введенные в нее значения методом POST сценарию в файле scen.php, будет доступна в этом сценарии в элементе массива $HTTP_POST_VARS['otziv'].
Поэтому для того, чтобы не зависеть от настройки РНР администратором сервера, вышеприведенный код можно переписать, используя в нем вместо имен переменных формы – элементы массива, поименованные как эти элементы формы. В таком случае он будет выглядеть следующим образом:
<?php $dirct="gb"; $otznam=$HTTP_POST_VARS['nom'].time(); $hdl = fopen("$dirct/$otznam", "w+"); fwrite($hdl,nl2br(strip_tags($HTTP_POST_VARS['ot ziv1]))); fclose($hdl); ?>