![]() |
![]() |
7895123 12.06.2004 - 17:40 |
Достал меня этот WAP %( * Добрые люди, поможите! Не могу заставить *.wml страницы показывать русские буквы на мобиле (SE T610). Можно их конечно перевести в вид типа рус прогой WML Unicode Convertor, но как-то же обходятся на некоторых сайтах без этого??? После долгих поисков вроде понял - надо сохранять документ в кодировке UTF-8, а первую сточку видоизменить на <?xml version="1.0" encoding="utf-8"?>. Но эффект нулевой :( Сохраняю в блокноте под Win2k. Хостинг net.ru * Может .htaccess как-то видоизменить или в какой-то другой проге сохранять странички в utf-8? * Кстати, как так получается, что некоторые вап сайты обходятся без строчек: <?xml version="1.0"?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> ...а сразу начинаются с <wml> причем в кодировке 1251 и все нормально работает? :-/ |
7895123 1 - 14.06.2004 - 19:10 | В WAP-е никто сайты не делал здесь? |
Буратинка 2 - 19.06.2004 - 14:02 | Я тоже с этой гадостью сталкнулся - ни какой редактор не делает это НО КАКОЕ СЧАСТЬЕ Я НАШЕЛ http://www.dol.ru/cargoe/evgeny/easyml/index.html - эта прога такая классная написана нашим человеком - смотри что у меня получилось - вчера делал, но не доканца - кстати скачай шаблон у него на сайте как образец - а вот что у меня получилось - пока ХЕЛЛО ВОРЛД , но я его сделаю и попутаюсь раскрутить wap.smsi.ru |
Буратинка 3 - 19.06.2004 - 14:04 | Ксатити если у тебя что получится пиши в гостевую книгу zakat.ru - пообщаемся - я хочу себе wap форум, wap игры, чат , тесты и т.д. как на wap.gala.net - самый любимый мой вап сайт - ОСОБЕННО ЧАТ :) |
WapSmiles 4 - 24.06.2004 - 11:48 |
Есть цепочка Телефон-ВапШлюз-ВапСайт, если ВапШлюз поддерживает перекодировку, то пиши в 1251, нет пиши р, или переведи в UTF8 и пиши в UTF8. По крайней мере у меня так. (wap4you.com) |
7895123 5 - 24.06.2004 - 13:08 |
2 Буратинка. EasyML уже юзал.. она также сохраняет русские буквы в виде р. Этот вариант плох тем, что размер странички резко увеличивается, а в wap-е он итак слишком маленький. ==== 2 WapSmiles. Если можно чуть подробнее. Что значит "если ВапШлюз поддерживает перекодировку"? Кто такой вапшлюз и как проверить что он поддерживает? :) Хочтинг нет.ру.. есессно я могу в .хтаццесс указать в какой кодировке загружать/выдавать документы.. (пробовал не получилось ничего у меня). Может глюк в блокноте, в котором я сохраняю в UTF8 или в FTP качалке - AsonaFTP? |
7895123 6 - 24.06.2004 - 13:11 |
Кстати, пока пользуюсь решением через Ж. - написал макрос, который переводит русские буквы в аналогичные по написанию латинские, а остальные в коды р ))) и обратную операцию... EasyML переводит ВСЕ буквы в коды.. соответственно и страничка весит побольше :( |
WapSmiles 7 - 24.06.2004 - 14:34 |
Макрос на чем?? Кстати так у меня и реализованно. А ВапШлюз, это как точка между интернетом и телефоном. Он проводит преобразования со страницами, в частности может сжимать .wml страницы в .wmlc (т.е. compressed) для сокращения издержек связи. А также одним из вариантов может быть перекодировка на лету содержания. Так что, ВапШлюз для нас недоступен, он стоит у оператора сотовой связи. |
7895123 8 - 24.06.2004 - 15:00 |
Макрос локальный.. хоть в ворде, хоть в HTML едиторе :) - Вот для PHP нашел функцию преобразования в unicod. Мне она понадобилась чтобы перекодировать текст в гостевой книге.. читаю ее на мобиле :) - <?php $cyr="Жизнь замечательных людей" $unicode=cyr_code($cyr); ?> Все некириличные знаки останутся нетронутыми. <?php //перекодировка win->unicode function cyr_code ($in_text){ $output=""; $other[1025]="Ё"; $other[1105]="ё"; $other[1028]="Є"; $other[1108]="є"; $other[1030]="I"; $other[1110]="i"; $other[1031]="Ї"; $other[1111]="ї"; for ($i=0; $i<strlen($in_text); $i++){ if (ord($in_text{$i})>191){ $output.="&#".(ord($in_text{$i})+848).";"; } else { if (array_search($in_text{$i}, $other)===false){ $output.=$in_text{$i}; } else { $output.="&#".array_search($in_text{$i}, $other).";"; } } } return $output; } ?> |
WapSmiles 9 - 24.06.2004 - 15:39 |
Так в чем-же дело??? Делаешь соответсвие Win1251 и UTF-8, да хоть любым редактором потдерживающщим конвертацию, на PHP пиши функцию замены русских букв на UTF8 соответсвие, в заголовке WML файла пропиши encoding="utf-8" В итоге вместо 7 символов произойдет замена на 2. :) |
WapSmiles 10 - 24.06.2004 - 15:42 |
Да, про размер страниц. В старом варианте (для старых телефонов) предел в радиусе 1300 байт, новые телефоны спокойно выкачивают 8000 и более... Суперновые и 32000 потянут, но обрати внимание на фактор малого экрана, и заинтересованности пользователя листать весь этот объем. Станет ли??? |
7895123 11 - 24.06.2004 - 16:03 | Сорри. Чет я под вечер дуго соображаю... Почему произойдет замена не на 7, а на 2 символа? Или UTF-8 и Unicode это не одно и то же? Если нет то где бы найти таблицу соответствия? :) |
WapSmiles 12 - 24.06.2004 - 16:58 |
Конечно НЕ одно и тоже :) UTF8 двумя байтами передает Unicode, только они сформированны по особому. А как работает? Да очень просто, открой мануал PHP LXXIX. XML parser functions функция - utf8_encode() там описано, но вариант &#hexhex на самом деле не так уж и плох. :) По крайней мере его понимают и телефоны и эмуляторы в подавляющем большинстве. Да к тому-же, пройдя через ВапШлюз на телефон может быть попадет уже переведенным в UTF8 (но никто не гарантирует этого) |
Shkalic 13 - 29.06.2004 - 10:27 |
Наконец-то нашёл что-то похожее на то, что мне надо. Сделал Вап страничку на PHP, прописал нужный заголовок, тип контента, чарсет, но телефон (Nokia 3510i) не понимает, говорит "Неверный формат". Так же пробовал на Самсунгах с100 и х450, не работает. Причём файлы в Аски с кодами типо р передаються отлично, но, как было уже упомянуто, много весят. А чём может бытть проблема (телефон/сервер/ошибка кода)? И что можно сделать? Пример кода который не работает: <?PHP header("Content-Type: text/vnd.wap.wml; charset=utf-8"); echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; ?> <!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN" "http://www.wapforum.org/DTD/wml_1.1.xml"> <wml> <card id="index" title="EDU"> <p align="center"> Welcome to WAP site.<br/> Хелло ворлд.<br/> Kās par šņaga?<br/> </p> </card> </wml> |
WapSmiles 14 - 29.06.2004 - 13:51 | 2Shkalic Пиши что не работает? Проверил - все ОК, по крайне мере на эмуляторе :) |
Shkalic 15 - 29.06.2004 - 14:17 |
WapSmiles Ага, на некоторых эмуляторе у меня тоже работало :) А вот телефоны отказываються принимать. Уже вротой день пытаюсь разобраться с Юникодом. Вроде действительно написано правильно, но получаю что-то проде "Неверный формат файла". Дай ссылку, куда ты закинул, я попробую телефоном приконектиться, может действительно проблема в моём сервере. |
WapSmiles 16 - 29.06.2004 - 14:56 |
http://wap4you.com/test.php на WinWAP работает :) |
WapSmiles 17 - 29.06.2004 - 14:59 | Только по русски там небудет, win1251 однако... |
Shkalic 18 - 29.06.2004 - 16:32 |
Неа, не работает. Тот же самый ответ. Абидно до боли :) Ну раз через эмуляторы работает, значит наверно сервер посылает то, что надо. А почему тогда телефон не принимает? Значит не совсем то что надо. Я уже начинаю сомневаться что телефоны понимают utf-8 :) А ты не пробовал с телефона зайти? Может быть сам файл надо как-то по другому закодировать? Я сохранял как utf-8. |
WapSmiles 19 - 29.06.2004 - 17:30 |
header ("Content-Type:text/vnd.wap.wml; charset=utf-8"); $output="<?xml version=\"1.0\"?>\n"; $output.="<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" "; $output.="\"http://www.wapforum.org/DTD/wml_1.1.xml\">\n"; echo $output; сделай так, у меня работает, если будешь писать р убери "; charset=utf-8" в header() |
Shkalic 20 - 30.06.2004 - 09:47 |
А у меня так не работает :( Кстати не вижу особово отличия от того что я запостил выше :) А без utf-8, обычные аски с Юникодами (р) и так работали. Ну может пока и этого будет достаточно. Просто непонятно из-за чего глюк. Странно. |
WapSmiles 21 - 30.06.2004 - 10:51 |
А что странного-то? Файл на сервер заливал? Заливал. А кодировка на серваке какая? В какой он отдает? Так что, может и не в коде дело... Хочешь проверить? убери строку с простым русским текстом, оставь инглишь и š подобные, если прокатит - дело в конвертации символов. Хотя надежнее посмотреть кодировки на серваке. |
Shkalic 22 - 30.06.2004 - 12:48 |
Если убрать всё кроме обычных Аски, но отдавать файл как utf-8, результат тот же - неработает. Насчёт сервера я не знаю что там, спрошу у админа. Но если эмуляторы понимают, это разве не значит, что сервер отдаёт нормально? |
WapSmiles 23 - 30.06.2004 - 13:56 | А что париться, дай адрес странички на твоем хостинге, я гляну? |
WapSmiles 24 - 30.06.2004 - 13:58 |
И создай такой файл phpinfo.php <?php phpinfo(); ?> посмотрим настройки сервера |
Shkalic 25 - 30.06.2004 - 14:33 |
Адрес странички: http://edu.e-solutions.lv/wap/wap8.php А файл вечером создам, тут на работе все порты практически закрыты :) |
WapSmiles 26 - 30.06.2004 - 14:36 |
<?xml version="1.0"?> а должно <?xml version="1.0"?> проверь что идет ДО начала вывода, НИЧЕГО не должно быть! |
Shkalic 27 - 30.06.2004 - 16:18 |
Да, я знаю что быть не должно... На сколько я понимаю - эти три символа означают что файл сохранён как utf-8. Я замечал что он весит чуть больше чем должен, но не подумал что оно будет мешать т.к. в блокноте их не видно и < идёт как первый символ. А если его так не сохранять то и Юникодовские символы не будут сохраняться. Что тогда делать? Сохранять как аски а utf-8 коды писать двумя байтами в ручную (ну или с помошью скрипта), а браузеру просто послать заголовок? Коряво. |
Shkalic 28 - 30.06.2004 - 21:36 |
Хмммм, стабильно. Теперь всё работает. Немного неудобно со стороны тех кто делает статические сайтики. После каждого пересохранения в блокноте надо опять подрезать эти три символа. В общем подвожу итог: Написал в блокнотике файл (тот что запостил в 13), использовал 2 разных, не английских, алфавита, сохранил как UTF-8. В FARe открыл и подтёр первые 3 символа, и теперь всё работает. Причём я пробовал даже без всяких обозначений кодировки всё равно понимает. Ну это наверно уже сервер постарался. В общем используя РНР проблем не будет, я так понимаю. Просто перед выводом любого текста надо прогнать его через функцию, о которой ты уже выше писал. Всем спасибо :) |