Итак, я хочу поднять затертую до дыр тему wap’a! Многие в этот момент пойдут юзать поиск на сайте, чтобы показать, что таких тем было много! Однако я думаю, что в это статье будет нечто другое! (это по сути даже не статья, а мини-пособие для желающих начать работать в вапе) Я планирую описать проблемы при программировании на php под wap. И дать несколько советов (я всей душой надеюсь, что они будут полезны) 1. Две версии разметки Новички, которые только начинают осваивать wap-программирование зачастую сталкиваются с проблемой создания своего сайта (скрипта) в двух версиях (обычно xHTML+WML). Многие делают два файла с разными разметками. Вот пример: xHTML-mobile Версия PHP: <?php header("Content-type:application/vnd.wap.xhtml+xml; charset=utf-8"); print '<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <meta http-equiv="Content-Type" content="application/vnd.wap.xhtml+xml; charset=UTF-8" />'; print '<title>xHTML-mobile</title>'; print '</head><body><div>'; print 'Текст, который нам нужно отобразить и в xHTML-mobile версии и в WML версии!<br/>'; print'</div></body></html>'; ?> WML Версия PHP: <?php header ("Content-type:text/vnd.wap.wml; charset=utf-8"); print '<?xml version="1.0" encoding="UTF-8"?>'; print '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">'; print '<wml><head><meta http-equiv="Cache-Control" content="no-cache" forua="true"/></head>'; print '<card title="WML-version">'; print '<p align="center">'; print 'Текст, который нам нужно отобразить и в xHTML-mobile версии и в WML версии!<br/>'; print '</p></card></wml>'; ?> Попробуем сделать один файл из этих двух! Я обычно разделяю обе версии оператором условия if, либо switch, так называемым «оператором выбора». Вот пример файла: PHP: <?php switch(@$_GET['version']) { case 'wml': header ("Content-type:text/vnd.wap.wml; charset=utf-8"); print '<?xml version="1.0" encoding="UTF-8"?>'; print '<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml">'; print '<wml><head><meta http-equiv="Cache-Control" content="no-cache" forua="true"/></head>'; print '<card title="WML-version">'; print '<p align="left">'; print '<a href="?version=xhtml">xHTML-mobile Version</a><br/>'; break; default: header("Content-type:application/vnd.wap.xhtml+xml; charset=utf-8"); print '<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN" "http://www.wapforum.org/DTD/xhtml-mobile10.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru"> <head> <meta http-equiv="Content-Type" content="application/vnd.wap.xhtml+xml; charset=UTF-8" />'; print '<title>xHTML-mobile</title>'; print '</head><body><div>'; print '<a href="?version=wml">WML Version</a><br/>'; break; } ######################## Текст страницы ######################## print 'Текст, который нам нужно отобразить и в xHTML-mobile версии и в WML версии!<br/>'; ################################################################ if(@$_GET['version']==='wml') { print '</p></card></wml>'; } else { print'</div></body></html>'; } ?> Этот файл уже выдает валидные страницы в зависимости от выбранной разметки! 1.1 Небольшое добавление к этому пункту! Как известно, наш «любимый» IE не хочет признавать разметки заточенные под wap! =( Для решения этой проблемы нам нужно, чтобы IE распознал страницу как валидную ему html. Действуем! Заменим 15 строку нашего скрипта: PHP: header("Content-type:application/vnd.wap.xhtml+xml; charset=utf-8"); на PHP: if (ereg('xhtml',getenv("HTTP_ACCEPT"))) { header("Content-type:application/vnd.wap.xhtml+xml; charset=utf-8"); } else { header("Content-type:text/html; charset=utf-8"); } (данный тип проверки можно сменить, при желании, например, проверять имя браузера, однако этот метод мне не нравится!) Все готово! Дальше! 2. Сессии и WAP Как известно многие телефоны не поддерживают прием кукисов. (сейчас многие подумают, что последние модели телефонов поддерживают ВСЕ от mp3 до зубной щетки, однако не хочется обижать и владельцев стареньких моделей) Поэтому сделаем так, чтобы все передавалось только через идентификатор сессии. Создаем файл .htaccess в директории со скриптом следующего содержания: Отлично, теперь все в порядке! Теперь можно присвоить идентификатору имя и передавать его по ссылкам. Например: PHP: session_name("SID"); … print '<a href="?action=view&'.SID.'">Просмотр</a><br/>'; Некоторые замечания, советы и просто мысли по теме: a) Если Вы все таки решились использовать сессии вместо ранее популярных в WAP’е методов передачи авторизационных данных GET’ом (типа index.php?id=1&pass=1234), то желательно написать функцию, которая сверяет IP-адрес и Броузер пользователя в данный момент, с этими же переменными записаными в базе при последнем вызове скрипта (т.к. идентификатор передаваемый GET'ом довольно опасен в плане перехвата)! Я написал функцию, которая сверяет юзер-агент и Айпи по первым трем разрядам маски, т.к. телефоны подключенные через GPRS обычно имеют динамические адреса. b) Еще один момент, на который я хотел бы обратить внимание – это частое использование юзер-агента (getenv('HTTP_USER_AGENT')). В отличие от WEB в вапе юзер-агент используется практически повсюду, однако очень многие забывают его фильтровать! На это тоже стоит обратить внимание. Конечно многие вряд ли узнают что то новое из этого, однако я надеюсь, что эта тема кому-нибудь да поможет! Спасибо за внимание!
satana8920, это уже тема другой статьи! В этой я планирую выкладывать только приемы и хитрости кодинга по wap, т.к. он немного различается с традиционным!
Для себя ничего нового не нашел, ты написал очень малую часть всех ньюансов которые там встречаються..