РНР 5 в подлиннике

Страница 34 из 554


70

Часть I. Основы Web-программирования

Что получается в итоге? Браузер получает документ в кодировке K.OI8-R. В заголовке content-Type у него также прописано KOI8-R. Однако во время анализа страницы браузер натыкается на тег <meta> с указанной кодировкой Windows-1251 (он, как вы помните, не изменялся сервером), и, т. к. указанные при помощи <meta> заголовки, имеют приоритет над "обычными" заголовками, браузер переключается назад в Windows-1251.

В результате пользователь видит на экране документ в KOI8-R, отображенный при помощи таблицы кодировки Windows-1251. Иными словами, он видит полную абра-

Рассмотренный пример не "взят с потолка", это вполне реальный случай, встречающийся весьма часто. Существует много браузеров под Unix со включенной по умолчанию кодировкой KOI8-R.

Надеемся, приведенный выше пример помог понять, почему одновременное указание кодировки при помощи тега <meta> и заголовка недопустимо — даже в случае, если кодировки совпадают и соответствуют документу. Иными словами, "русский Apache" несовместим с указанием кодировки в теге <meta>.

Но как же быть с "идеологическими соображениями" о пользе указания кодировки в самом документе, которые мы приводили выше? Есть только один выход: если вы хотите использовать тег <meta> на своих страницах, удостоверьтесь, что "русский Apache" отключен.

В последнее время все меньше и меньше хостеров устанавливают у себя "русский Apache" именно по описанной выше причине. Тем не менее не стоит полагаться на случай: лучше отключить mod_charset самостоятельно. Делается это при помощи следующей директивы Apache, которую необходимо поместить в файл .htaccess в каталоге документов сервера:

<IfModule.mod_charset.c>

CharsetDisable on </IfModule>

Итак, мы знаем, что наиболее распространенными методами передачи данных между браузером и сценарием являются get и post. Однако вручную задавать строки параметров для сценариев и к тому же URL-кодировать их, согласитесь, довольно утомительно. Давайте посмотрим, что же язык HTML предлагает нам для облегчения жизни.

Сначала рассмотрим метод get. Даже программисту довольно утомительно набирать параметры в URL вручную. Всякие там ?, &, %... Представьте себе пользователя, которого принуждают это делать. К счастью, существуют удобные возможности языка

кадабру.

Отключение автоматической перекодировки

Что такое формы и для чего они нужны?

Глава 2. Интерфейс CGI и HTTP

71

HTML, которые, конечно, поддерживаются браузерами. И хотя мы уже замечали, что в этой книге будет лишь немного рассказано об HTML, о формах мы поговорим очень подробно.

Итак, пусть у нас на сервере в корневом каталоге размещен файл сценария script.cgi (наверное, вы уже заметили, что расширение CGI принято присваивать CGI-сценариям, хотя, как уже упоминалось, никто не мешает вам использовать любое другое слово). Этот сценарий распознает два параметра: name и born. Где эти параметры задаются, мы пока не решили. При переходе по адресу http://example.com/script.cgi сценарий должен отработать и вывести следующую HTML-страницу:

<htmlxbody>

Привет, name! Я знаю, Вы родились born! </body></html>

Разумеется, при генерации страницы параметры name и born нужно заменить на соответствующие значения, переданные в них.

Передача параметров "вручную"

Давайте будем включать параметры прямо в URL, в строку параметров. Таким образом, если запустить в браузере

http://exampIe.com/script.cgi?name=Thomas&born=1962-03-ll

мы получим страницу с нужным результатом:

<htmlxbody>

Привет, Thomas! Я знаю, Вы родились 1962-03-11! </bodyx/html>

Заметьте, что мы разделяем параметры символом &, а также используем знак равенства =. Это неспроста. Сейчас обсудим, почему.

Использование формы

Что теперь нам следует сделать, чтобы пользователь мог в удобной форме ввести свое имя и возраст? Очевидно, придется создать что-то вроде диалогового окна Windows, только в браузере. Итак, нам понадобится обычный HTML-документ (например, с именем getform.htm и расположенный в корневом каталоге) с элементами этого диалога — полями ввода и кнопкой, при нажатии которой запустится наш сценарий. Текст этого документа приведен в листинге 2.1.

I Листинг 2.1. Файл getform.htm

<!— Документ с формой. —> <htmlxbody>

<form action=login.cgi method=GET> Введите имя:

<input type=text name="name" value="HeH3BecTHbM"xbr>




  Hostland.Ru

 «Бесплатный хостинг Hostland.Su» © 2006