Показать сообщение отдельно

  #2  
Старый 18.12.2007, 13:54
BlackCats
Постоянный
Регистрация: 01.02.2006
Сообщений: 970
Провел на форуме:
9254548

Репутация: 1942


По умолчанию

Код:
htmlspecialchars()

Не нашли? Я подскажу. Введите, например, в поле "имя" двойную кавычку и какой-нибудь текст, например, "123. Отправьте форму, и взгляните на исходный код полученной страницы. В четвертой строке будет что-то наподобие:
Введите Ваше имя: <input type="text" name="name" value=""123">

То есть - ничего хорошего. А если бы хитрый пользователь ввел JavaScript-код?

Для решения этой проблемы необходимо воспользоваться функцией htmlspecialchars(), которая заменит служебные символы на их HTML-представление (например, кавычку - на &quot;):

  1.  <html>
   2.  <body>
   3.  <?
   4.    $name = isset($_POST['name']) ? htmlspecialchars($_POST['name']) : '';
   5.    $year = isset($_POST['year']) ? htmlspecialchars($_POST['year']) : '';
   6.  
   7.    if (isset($_POST['name'], $_POST['year'])) {
   8.      if ($_POST['name'] == '') {
   9.        echo 'Укажите имя!<br>';
  10.      } else if ($_POST['year'] < 1900 || $_POST['year'] > 2004) {
  11.        echo 'Укажите год рождения! Допустимый диапазон значений: 1900..2004<br>';
  12.      } else {
  13.        echo 'Здравствуйте, ' . $name . '!<br>';
  14.        $age = 2004 - $_POST['year'];
  15.        echo 'Вам ' . $age . ' лет<br>';
  16.      }
  17.      echo '<hr>';
  18.    }
  19.  ?>
  20.  <form method="post" action="<?=$_SERVER['PHP_SELF']?>">
  21.    Введите Ваше имя: <input type="text" name="name" value="<?=$name?>">
  22.    <br>
  23.    Введите Ваш год рождения: <input type="text" name="year" value="<?=$year?>">
  24.    <input type="submit" value="OK">
  25.  </form>
  26.  </body>
  27.  </html>

Повторите опыт и убедитесь, что теперь HTML-код корректен.

Запомните - функцию htmlspecialchars() необходимо использовать всегда, когда выводится содержимое переменной, в которой могут присутствовать спецсимволы HTML.
оно?