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

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


96

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

Кстати, совершенно не уникальный случай — то, что с одним именем связано сразу несколько значений. Действительно, нам никто не мешает создавать и другие теги с идентичными именами. Это часто делается, например, для флажков:

<input type=checkbox пате=имя уа1ие="Один">Один<Ьг> <input type=checkbox пате=имя уа1ие="Два">Два<Ьг> <input type=checkbox пате=имя уа1ие="Три">Три<Ьг>

Если теперь пользователь установит сразу все флажки, то сценарию поступит строка (конечно, в URL-кодированном виде):

имя=Один & имя=Дв а & имя=Три

Из всего сказанного следует не очень утешительный вывод: при разборе строки параметров в сценарии мы не можем полагаться на то, что каждой переменной соответствует только одно значение. Нам придется учитывать, что их может быть не "одно", а "много". А это очень неприятно с точки зрения программирования, особенно на С.

Попутно мы обнаружили, что любой multiple-список может быть представлен набором флажков (независимых переключателей), а любой не-miitipie — в виде нескольких радиокнопок. Так что, вообще говоря, тег <seiect> — некоторое функциональное излишество, и с точки зрения сценария вполне может заменяться флажками и радиокнопками.

НТМ L-сущности

До сих пор мы не заостряли внимание на то, как должны быть представлены значения атрибутов — иными словами, как выглядят строки в кавычках, которые располагаются внутри тегов. Например, представьте, что, если в следующем теге:

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

нам потребуется вставить строку не "один", а "много", содержащую кавычки? Очевидно, мы не можем написать напрямую:

<input type=text name="text" value="He "один", а "много"">

Для решения таких проблем существует специальный метод кодирования данных, когда некоторые специальные символы заменяются на эквивалентные им HTML-сущности (HTML-entities). Все такие сущности имеют одинаковый формат, например: sit,-, &gt,-, squot,-, sapos; и т. д, — надеемся, вы уловили закономерность.

При вставке значений атрибутов необходимо обязательно заменять символы, перечисленные в табл. 3.1.

Таблица 3.1. Основные HTML-сущности

Что заменять

Чем заменять

Что заменять

Чем заменять

>

sgt;

"

& quot;

<

Sit;

Sapos;

&

Samp;

Гпава 3. CGI изнутри

97

С

Замечание

Обратите внимание, что после вставки в обычной HTML-код каждой из HTML-сущностей справа браузер будет отображать на экране соответствующий символ слева. Например, вставьте в страницу sit; — увидите знак "больше".

Это же относится и к тексту между тегами <textarea>... </textarea>. Действительно, представьте ситуацию, когда нам нужно вставить кусочек текста "</textarea>" между этими двумя тегами — но так, чтобы он не воспринимался как окончание элемента. Следует написать так:

<textarea>

Отредактируйте код тега

&lt;textarea&gt;...Sit;/textarea&gt; </textarea>

Все основные скрипт-языки имеют специальные функции для HTML-кодирования

строк. Например, В РНР ЭТО делается при ПОМОЩИ функции htmlspecialchars О,

о которой мы будем говорить в гл. 15.

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

Данный раздел главы предназначен скорее для ознакомления, нежели для применения в качестве точной инструкции по загрузке файлов. Он прекрасно демонстрирует, почему нам так удобно использовать РНР для программирования в Web. Организацию загрузки файлов в РНР мы подробно разберем в части VII.

Формат данных

В свое время мы говорили, что все данные из формы при передаче их на сервер упаковываются в строку при помощи символов ?, & и =. Легко видеть, что при загрузке файлов такой способ, хотя и приемлем, но будет существенно увеличивать размер передаваемой информации. Действительно, ведь большинство файлов — бинарные, а мы знаем, что при URL-кодировании данные таких файлов сильно "распухают" — примерно в три раза (например, простой нулевой байт при URL-кодировании превратится в %оо). Это сильно замедлит передачу и увеличит нагрузку на канал. И вот, отчасти специально для решения указанной проблемы, был придуман другой формат передачи данных, отличный от того, который мы до сих пор рассматривали. В нем уже не используются пресловутые символы ? и &. Кроме того, похоже, в случае применения такого формата передачи может быть задействован только метод post, но не метод get. Нас это вполне устроит — ведь файлы обычно большие, и доставлять их через get вряд ли разумно...

Загрузка файлов




  Hostland.Ru

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