Задать вопрос
@sunnyrio

Почему текст формы отображается некоректно?

Переписал пример из книги O'reily при запуске программы выводиться результат с искаженным текстом, помогите разобраться в чем причина, сам код и скриншот работы программы ниже:

30e24f6eb7104f86a35300b430875e83.png
<?php // adduser.php

// Сначала следует код PHP

$forename = $surname = $username = $password = $age = $email = "";

if (isset($_POST['forename']))
   $forename = fix_string($_POST['forename']);
if (isset($_POST['surname']))
   $surname = fix_string($_POST['surname']);
if (isset($_POST['username']))
   $username = fix_string($_POST['username']);
if (isset($_POST['password']))
   $password = fix_string($_POST['password']);
if (isset($_POST['age']))
   $age = fix_string($_POST['age']);
if (isset($_POST['email']))
   $email = fix_string($_POST['email']);

$fail = validate_forename($forename);
$fail .= validate_surname($surname);
$fail .= validate_username($username);
$fail .= validate_password($password);
$fail .= validate_age($age);
$fail .= validate_email($email);

echo "<html><head><title>Пример формы</title>";

if ($fail == "") {
   echo "</head><body>Проверка формы прошла успешно: $forename, $surname, $username, $password, $age, $email.</body></html>";

   // В этом месте поля будут вводиться в базу данных

   exit;
}

// Теперь выводиться HTML и код JavaScript

echo <<<_END

<!-- Раздел HTML -->

<style>.signup { border: 1px solid #999999;
   font: normal 14px helvetica; color: #444444; }</style>
<script> type="text/javascript">
function validate(form)
{
   fail  = validateForename(form.forename.value)
   fail += validateSurname(form.surname.value)
   fail += validateUsername(form.username.value)
   fail += validatePassord(form.password.value)
   fail += validateAge(form.age.value)
   fail += validateEmail(form.email.value)
   if (fail == "") return true
   else { alert(fail); return false }
}
</script></head><body>
<table class="signup" border="0" cellpadding="2" cellspacing="5" bgcolor="#eeeeee">
<th colspan="2" align="center">Регистрационная форма</th>

<tr><td colspan="2">К сожалению, в вашей форме <br />
найдены следующие ошибки: <p><font color=red size=1><i>$fail</i></font></p>
</td></tr>

<form method="post" action="adduser.php" onSubmit="return validate(this)">
   <tr><td>Имя</td><td><input type="text" maxlength="32" name="forename" value="$forename" /></td>
</tr><tr><td>Фамилия</td><td><input type="text" maxlength="32" name="surname" value="$surname" /></td>
</tr><tr><td>Пользовательское имя</td><td><input type="text" maxlength="16" name="username" value="$username" /></td>
</tr><tr><td>Пароль</td><td><input type="text" maxlength="12" name="password" value="$password" /></td>
</tr><tr><td>Возраст</td><td><input type="text" maxlength="3" name="age" value="$age" /></td>
</tr><tr><td>Электронный адрес</td><td><input type="text" maxlength="64" name="email" value="$value" /></td>
</tr><tr><td colspan="2" align="center"><input type="submit" value="Зарегистрироваться" /></td>
</tr></form></table>

<!-- Раздел JavaScript -->

<script type="text/javascript">
function validateForename(field) {
   if (field == "") return "Не введено имя.\\n"
   return ""
}

function validateSurname(field) {
   if (field == "") return "Не введена фамилия.\\n"
   return ""
}

function validateUsername(field) {
   if (field == "") return "Не введено имя пользователя.\\n"
   else if (field.length < 5)
      return "В имени пользователя должно быть не менее 5 символов.\\n"
   else if (/[^a-zA-Z0-9_-]/.test(field))
      return "В имени пользователя разрешены только a-z, A-Z, 0-9, - и _.\\n"
   return ""
}

function validatePassword(field) {
   if (field == "") return "Не введен пароль.\\n"
   else if (field.length < 6)
      return "В пароле должно быть не менее 6 символов.\\n"
   else if (!/[a-z]/.test(field) || ! /[A-Z]/.test(field) || ! /[0-9]/.test(field))
      return "Пароль требует 1 символа из каждого набора a-z, A-Z, и 0-9.\\n
   return ""
}

function validateAge(field) {
   if (isNaN(field)) return "Не введен возраст.\\n"
   else if (field < 18 || field > 110)
      return "Возраст должен быть между 18 и 110.\\n"
   return ""
}

function ValidateEmail(field) {
   if (field == "") return "Не введен адрес электронной почты.\\n"
      else if (!((field.indexOf(".") > 0) && (field.indexOf("@") > 0)) || /[^a-zA-Z0-9.@_-]/.test(field))
      return "Электронный адрес имеет неверный формат.\\n"
   return ""
}
</script></body></html>
_END;

//  И в завершающей части - PHP-функции

function validate_forename($field) {
   if ($field == "") return "Не введено имя<br />";
   return "";
}

function validate_surname($field) {
   if ($field == "") return "Не введена фамилия<br />";
   return "";
}

function validate_username($field) {
   if ($field == "") return "Не введено имя пользователя<br />";
   else if (strlen($field) < 5)
      return "В имени пользователя должно быть не менее 5 символов<br />";
   else if (preg_match("/[^a-zA-Z0-9_-]/".$field))
      return "В имени пользователя допускаються только буквы, цифры, - и _<br />";
   return "";
}

function validate_password($field) {
   if ($field == "") return "Не введен пароль<br />";
   else if (strlen($field) < 6)
      return "В пароле должно быть не менее 6 символов<br />";
   else if ( !preg_match("/[a-z]/", $field) || !pregmatch("/[A-Z]/", $field) || !preg_match("/[0-9]/", $field))
      return "Пароль требует 1 символа из каждого набора a-z, A-Z, 0-9<br />";
   return "";
}

function validate_age($field) {
   if ($field == "") return "Не введен возраст<br />";
   else if ($field < 18 || $field > 110)
      return "Возраст должен быть между 18 и 110<br />";
   return "";
}

function validate_email($field) {
   if ($field == "") return "Не введен адрес электронной почты<br />";
      else if (!((strpos($field, ".") > 0) && (strpos($field, "@") > 0)) || preg_match("/[^a-zA-Z0-9.@_-]/", $field))
      return "Электронный адрес имеет неверный формат<br />";
   return "";
}

function fix_string($string) {
   if (get_magic_quotes_gpc()) $string = stripslashes($string);
   return htmlentities($string);
}
?>
  • Вопрос задан
  • 197 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Arik
1. Перед тем как что показывать, отправляйте заголовки с типом документа и кодировкой
Например
header('content-type: text/html; charset=utf-8');
Важно чтоб был отправлен ДО того как начнете что-то показывать.

2. На 119 строке используете неизвестную переменную

3. Файл может сохранен с BOM, надо норм редактор взять и сохранить без BOM
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы