РНР 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,-, >,-, squot,-, sapos; и т. д, — надеемся, вы уловили закономерность. При вставке значений атрибутов необходимо обязательно заменять символы, перечисленные в табл. 3.1. Таблица 3.1. Основные HTML-сущности
Гпава 3. CGI изнутри 97 С Замечание Обратите внимание, что после вставки в обычной HTML-код каждой из HTML-сущностей справа браузер будет отображать на экране соответствующий символ слева. Например, вставьте в страницу sit; — увидите знак "больше". Это же относится и к тексту между тегами <textarea>... </textarea>. Действительно, представьте ситуацию, когда нам нужно вставить кусочек текста "</textarea>" между этими двумя тегами — но так, чтобы он не воспринимался как окончание элемента. Следует написать так: <textarea> Отредактируйте код тега <textarea>...Sit;/textarea> </textarea> Все основные скрипт-языки имеют специальные функции для HTML-кодирования строк. Например, В РНР ЭТО делается при ПОМОЩИ функции htmlspecialchars О, о которой мы будем говорить в гл. 15. Иногда бывает просто необходимо разрешить пользователю не только заполнить текстовые поля формы и установить соответствующие переключатели, но также и указать несколько файлов, которые будут впоследствии загружены с компьютера пользователя на сервер. Для этого в языке HTML предусмотрены специальные средства. Рассмотрим их подробнее. Данный раздел главы предназначен скорее для ознакомления, нежели для применения в качестве точной инструкции по загрузке файлов. Он прекрасно демонстрирует, почему нам так удобно использовать РНР для программирования в Web. Организацию загрузки файлов в РНР мы подробно разберем в части VII. Формат данных В свое время мы говорили, что все данные из формы при передаче их на сервер упаковываются в строку при помощи символов ?, & и =. Легко видеть, что при загрузке файлов такой способ, хотя и приемлем, но будет существенно увеличивать размер передаваемой информации. Действительно, ведь большинство файлов — бинарные, а мы знаем, что при URL-кодировании данные таких файлов сильно "распухают" — примерно в три раза (например, простой нулевой байт при URL-кодировании превратится в %оо). Это сильно замедлит передачу и увеличит нагрузку на канал. И вот, отчасти специально для решения указанной проблемы, был придуман другой формат передачи данных, отличный от того, который мы до сих пор рассматривали. В нем уже не используются пресловутые символы ? и &. Кроме того, похоже, в случае применения такого формата передачи может быть задействован только метод post, но не метод get. Нас это вполне устроит — ведь файлы обычно большие, и доставлять их через get вряд ли разумно... Загрузка файлов
|
| |||||||||||||||||
|
В начало ←предыдущая следующая→ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 ... | ||||||||||||||||||