Ru-Board.club
← Вернуться в раздел «Web-программирование»

» WAP+PHP и русские буквы

Автор: SiMM
Дата сообщения: 31.07.2004 08:45

Цитата:
обьясни мне, пожалуйста, ЗАЧЕМ в базе хранить данные в кодировке отличной от той в которой выводится контент?
MySQL (старых версий), если не ошибаюсь, не поддерживал Unicode. Да и избыточность Unicode для одноязычного сайта очевидна.
Автор: Kokoc
Дата сообщения: 31.07.2004 14:37
Mamay
Я устал бится головой о стену!
Пожалуйста, не бейся. Разобьешь башку - кто нас консультировать будет?


Цитата:
обьясни мне, пожалуйста, ЗАЧЕМ в базе хранить данные в кодировке отличной от той в которой выводится контент?

Потому что данные выводятся как через обычный сайт в обчном html, так и через wap-версию того же сайта. Так что все равно заморачиваться - либо переписывать html и под юникод плюс дополнительный гиморрой при конвертации оргинальной базы (писаной на Кларионе) в mysql, либо wap под win1251. Но html-версия создана намного раньше, содержит на порядок больше отображаемой из БД информации и ее перелопачивать скрипты или html ее ради того же геморроя с кодировками совершенно нет желания.
Пример - телефонный справочник http://wap.maykop.org.ru с поиском в нем.


P.S. За ссылки спасибо.
Кстати, через сайт [url=http://waprunner.wap3.net/emu_wap3/p/wap3/]waprunner[/i] таблицы не выводятся; точнее, игнорируются теги table, tr, td. Так должно быть?
И еще - пишет ошибку "Unknown content-type: application/wap.vnd.wmlc", хотя в передаваемых header'ах этот тип присутствует и прописан в .htaccess. Другие эмуляторы таблицы и wmlc кажут нормально.
Автор: ckayt
Дата сообщения: 31.07.2004 18:21
не пониаю зачем ломать голову над добычей убогих онлайн вап-эмуляторов???
разве не достаточно старой доброй оперы и w3c-validator'а???

Добавлено

Цитата:
Пример - телефонный справочник http://wap.maykop.org.ru с поиском в нем.

http://wap.maykop.org.ru/electro.wml
здесь ошибка. даже много. </br> - такого не должно быть. особенно в xml (wml)
Автор: Kokoc
Дата сообщения: 02.08.2004 09:24
Да, действительно, с <br> ошибочки...
Спасибо.
Автор: Mamay
Дата сообщения: 02.08.2004 12:39
Kokoc
в WML 1.1 - тегов <table> НЕТ...
Автор: Mamay
Дата сообщения: 04.08.2004 15:18
Kokoc

Цитата:
Да, действительно, с <br> ошибочки...
Спасибо.

в wml ВСЕ таги должны закрыватся
<br> -> <br/>
<input ...> -> <input ... />
<img ...> -> <img ... />
Автор: laigri
Дата сообщения: 11.01.2005 18:01
Mamay


Цитата:
у меня все WAP сайты в UTF-8
как только начал писать в UTF-8 - сразу забыл про проблемы - правда не все старые девайсы это дело понимают...


Насчет UTF-8, полностью согласна, но...
Во-первых, каждая колода начинает весить килобайт так пять, и как с этим бороться непонятно
во-вторых, я не нашла нормального WAP редактора чтобы он нормально работал с UTF-8, может кто посоветует,
в-третьих, см. цитату, как сделать так чтобы и старые девайсы это понимали?
Автор: SiMM
Дата сообщения: 11.01.2005 18:13

Цитата:
колода начинает весить килобайт так пять
А сколько было? Увеличение объёма менее чем в два раза вполне логично.
Цитата:
не нашла нормального WAP редактора чтобы он нормально работал с UTF-8
Преобразовывать данные в UTF-8, например, из CP1251, можно на лету.
Цитата:
как сделать так чтобы и старые девайсы это понимали
Никак. Разве что использовать транслитерацию (кириллица латиницей).
Автор: laigri
Дата сообщения: 11.01.2005 18:46
SiMM

Цитата:
сколько было? Увеличение объёма менее чем в два раза вполне логично.

644 а стало 1064, но на этой странице только 5 текстовых ссылок, а вот страница с текстом из 1223 превратилась в 5829, что, по моему мнению не хорошо.

Цитата:
Преобразовывать данные в UTF-8, например, из CP1251, можно на лету.

Не поняла, это имеется ввиду создание страниц в CP1251 и перекодивовка их уже на сервере? А хотелось немного не то, а именно, перекодировка на локальной машине, напримери беру кусок текста, вставляю на страницу и сохраняю в UTF-8.
Автор: SiMM
Дата сообщения: 11.01.2005 19:18

Цитата:
а вот страница с текстом из 1223 превратилась в 5829
Это невозможно. Конечно же, если вы действительно используете UTF-8 (и ограничиваетесь символами в пределах кодировки Windows-1251), а не HTML-кодирование Unicode символов (кодирование символов кириллицы при помощи HTML-entities, т.е. каждый символ выглядит как &#ДЕСЯТИЧНЫЙ_КОД_В_UNICODE; или &#xШЕСТНАДЦАТЕРИЧНЫЙ_КОД_В_UNICODE;)
Цитата:
имеется ввиду создание страниц в CP1251 и перекодивовка их уже на сервере?
Не совсем. Имеется ввиду перекодировка "на-лету", т.е. непосредственно при выводе контента.
Цитата:
А хотелось немного не то, а именно, перекодировка на локальной машине, напримери беру кусок текста, вставляю на страницу и сохраняю в UTF-8.
А смысл? Если вам удобнее на локальной машине (из-за редакторов) работать с Windows-1251 - то почему бы нет? Я так мыслю, что для WAP-ресурсов проблема большой нагрузки на сервер пока ещё не актуальна, поэтому формирование контента на лету, я думаю, вполне преемлемое решение. А уж если у вас и так контент динамический - то проблем вообще быть не должно.
Автор: laigri
Дата сообщения: 11.01.2005 19:58
SiMM

Цитата:
если вы действительно используете UTF-8 (и ограничиваетесь символами в пределах кодировки Windows-1251), а не HTML-кодирование Unicode символов (кодирование символов кириллицы при помощи HTML-entities

Все, приехали. Я конечно понимаю, что я ничего не понимаю в кодировках, но что настолько... Помогите.
По моим предположениям в кодировке UTF-8, слово Программы выглядит следующим образом &#x041F;&#x0440;&#x043E;&#x0433;&#x0440;&#x0430;&#x043C;&#x043C;&#x044B;
Это правильно? Это то что я думаю или Unicode.
Автор: SiMM
Дата сообщения: 11.01.2005 20:13

Цитата:
По моим предположениям в кодировке UTF-8, слово Программы выглядит следующим образом &#x041F;&#x0440;&#x043E;&#x0433;&#x0440;&#x0430;&#x043C;&#x043C;&#x044B;
Это Unicode-кодированный HTML (я не знаю точного названия термина, поскольку в HTML не разбираюсь ). А в нормальном UTF-8 каждая буква в слове "Программы" занимала бы по два байта (однако латиница в UTF-8 кодируется одним байтом, символы других алфавитов могут занимать до 6ти байт), и в шестнадцатеричном дампе выглядела бы так:
Код: d0.9f d1.80 d0.be d0.b3 d1.80 d0.b0 d0.bc d0.bc d1.8b
Автор: laigri
Дата сообщения: 11.01.2005 23:18
А если отойти от PHP, то откуда тогда в обыкновенных wml страницах берут UTF-8
Автор: SiMM
Дата сообщения: 12.01.2005 09:23
Конвертят. Например, тем же блокнотом (правда, эта зараза ещё три байта лишних вначале добавляет) - Файл=>Сохранить как=>UTF-8. Правда лично я не вижу особого смысла в статике
Автор: zalexf
Дата сообщения: 12.01.2005 13:39
Вот этот код работает по адресу http://baraholka.com.ru/wap/

//конвертируем из обычного текста с кириллицей в uft8
function win2utf($src)
{
if ($src!="")
//замена символа "&" на UTF-8 синоним
$src=str_replace("&","&amp;", $src);
//обработка букв
for ($i=ord('А'); $i<=ord('я'); $i++)
$src=str_replace(chr($i), '&#x0'.base_convert($i-ord('А')+0x410,10,16).';', $src);
return $src;
}

//а страничку в результате выводим так
Header("Content-Type: text/vnd.wap.wml");
echo "<!DOCTYPE wml PUBLIC \"-//WAPFORUM//DTD WML 1.1//EN\" \"http://www.wapforum.org/DTD/wml_1.1.xml\">";
echo "<wml>";
echo "<card id=\"page\" title=\"BARAHOLKA.COM.RU\">".win2utf($page)."</card>";
echo "</wml>";

где
$page - там код странички в обычном win-1251, например: "<p>Привет мир!</p>"
Автор: Mamay
Дата сообщения: 12.01.2005 14:53
Нате вам ещё один вариант
ANY -> UTF-8

Код:
function _in_wmldbstr($matches)
{
return chr($matches[1]);
}

function wmldbstr( $input_text ) {
$input_text= preg_replace_callback(
"|&#(\d{2,4};)|",
"_in_wmldbstr",
$input_text);
if(!preg_match('/[\xC0-\xDF][\x80-\xBF]|'.
'[\xE0-\xEF][\x80-\xBF][\x80-\xBF]|'.
'[\xF0-\xF7][\x80-\xBF][\x80-\xBF][\x80-\xBF]|'.
'[\xF8-\xFB][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]|'.
'[\xFC-\xFD][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF][\x80-\xBF]/', $input_text) )
{
$input_text = utf8_encode($input_text);
};

# $input_text = preg_replace('/(\$)/', "$$", $input_text);
# $input_text = preg_replace('/(\&euro;)/', "тВм", $input_text);
# $input_text = htmlspecialchars($input_text);
# $input_text = preg_replace('/(\&quot;)/', "'", $input_text);

return $input_text;
}
Автор: SiMM
Дата сообщения: 12.01.2005 15:21
zalexf, специально для тех, кто не умеет читать - &#КОД; (или &#xКОД;) - это не UTF-8. Это HTML-представление Unicode-символов. Кодировка Unicode и UTF-8 - это не одно и то же - UTF-8 - это подкласс Unicode, к Unicode чаще относят кодировки типа UTF-16BE, UTF-16LE, UTF-32 - т.е. кодировки, в которых на каждый символ алфавита отводится фиксированное число байт.
Mamay, прям так уж и ANY? И что же, прям так уж и в UTF-8? И эта функция для преобразования ANY в UTF-8?
Два примера:
Код: echo wmldbstr('&#1055;&#1088;&#1086;&#1075;&#1088;&#1072;&#1084;&#1084;&#1099;');
Автор: Mamay
Дата сообщения: 12.01.2005 15:40
SiMM
Не умничай, Да!
Функции можно передавать строку в любой кодировке...
А не набор кракозябл...
Автор: SiMM
Дата сообщения: 12.01.2005 15:46
Mamay, а вы попробуйте её для начала (нафига я примеры приводил?). И потом - не зная из какой кодировки перевести в UTF-8 невозможно (я не говорю о HTML-евских наворотах типа &#КОД; и &#xКОД;).
PS: и, кстати, набор крякозябр обрабатывается при помощи $input_text= preg_replace_callback("|&#(\d{2,4};)|","_in_wmldbstr",$input_text); если я правильно понял вашу интерпретацию слова "крякозябры"
Автор: Mamay
Дата сообщения: 12.01.2005 17:08
так вот на вход можно подавать арабские кодировки и всякие там ISO-xxxx...
Автор: SiMM
Дата сообщения: 12.01.2005 20:14
Mamay, да ну? Неужели я так много прошу? Я вам даже код привёл, который всего то нужно сCut&Paste'ть и убедиться, что никакой это не UTF-8 (не UTF-8 кириллицы). Как выглядит UTF-8 слова "Программы" я уже написал. И вообще - почему я должен вас уговаривать? Вы написали, что эта функция переводит ИЗ ЛЮБОЙ КОДИРОВКИ (что вообще невозожно, и этот факт очевиден даже малознакомому с предметом человеку) в UTF-8. И судя по всему, даже не удосужились убедиться, что это не так. Меня вообще поражает в этом коде глупость, с которой осуществляется chr($x) для $x>255. Я уж не говорю о том, что судя по всему вы до сих пор не догадались посмотреть в мануал по utf8_encode, чтобы осознать свою неправоту.
PS: есть ещё одно подмножествой забавных случаев, когда приведённая вами функция вообще ничего не сделает со входной строкой:
Код: echo wmldbstr('- Рёва, - крикнул Саша вслед Маше.');
Автор: laigri
Дата сообщения: 13.01.2005 01:10
SiMM
Спасибо, общая суть ясна.

Цитата:
мануал по utf8_encode

А если не трудно можно еще ссылок на матчасть, желательно чтобы все описанные варианты

Цитата:
Unicode-кодированный HTML


Цитата:
UTF-8

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

Цитата:
Правда лично я не вижу особого смысла в статике

А так меньше вероятность ошибки. Так проще понять, что читается телефонами, а что нет. А то если будет еше ошибка в коде....
Кстати все мои WAP редакторы (waptor, DotWAP) отображают UTF-8 кракозябликами поэтому придется править в блокноте ,

Цитата:
три байта лишних вначале добавляет

а что там с тремя лишними байтами?
И с онлайн просмотровиками та же ситуация , единственное место (кроме телефонов) где мои кракозяблики поняли это http://validator.w3.org/, интересно этого достаточно, чтобы быть уверенной, что разумное большинство телефонов почитает текст?

ps. Опс! А редактор nokia все понимает. Отдельное спасибо Mamay. Недаром он его всем советует.
Автор: Mamay
Дата сообщения: 13.01.2005 11:32
всё
я увял...
как приятно себя осознавать глупым и видеть что у себя всё работает, а у умных не всё и не всегда...

ВСЁ - больше в эту тему не смотрю....
Достала она меня окончательно
Автор: SiMM
Дата сообщения: 13.01.2005 20:41

Цитата:
А если не трудно можно еще ссылок на матчасть, желательно чтобы все описанные варианты
Как сделать многоязычную WWW страницу, там правда не описан вариант &#xШЕСТНАДЦАТЕРИЧНЫЙ_КОД; - но я думаю, это несущественно и непринципиально.
2Mamay, я бы советовал и вам с этим ознакомиться, дабы больше не витать в облаках и ощущать разницу между западноевропейской кодировкой ISO-8859-1 и кириллицей в Windows-1251.
Автор: laigri
Дата сообщения: 14.01.2005 00:43
SiMM
Спаибо!
Автор: Gram
Дата сообщения: 21.01.2005 23:10
Проблема такого плана: при отправке переменных из формы в скрипт передаются крякозябры. Проблема где-то в кодировке. Для нормального вывода у меня стоит кодировщик из русского текста в utf - преобразует к примеру буковку $buk["а"]="&#x0430;"; и т.д. А если все сделать так как сказал Mamay, т.е. писать страничку сразу в utf и ставить

Код: <?xml version=\"1.0\" encoding=\"utf-8\"?>
Автор: SiMM
Дата сообщения: 22.01.2005 15:41
Gram, это уже было, просто указывать надо кодировку как в хидерах, так и в самом документе. Да и руками ничего делать не надо, если речь об одноязыковых страничках.
Автор: Gram
Дата сообщения: 23.01.2005 01:58
Поставил


Код: <?xml version=\"1.0\" encoding=\"windows-1251\"?>
Автор: SiMM
Дата сообщения: 23.01.2005 09:08

Цитата:
windows-1251
А с чего вы решили, что ваш телефон знает о существовании такой кодировки?
Автор: Gram
Дата сообщения: 23.01.2005 11:36
SiMM
Сделал вот что:

1. Поставил


Код: header("Content-type: text/vnd.wap.wml");
header("Accept-Charset: UTF-8");

Страницы: 1234

Предыдущая тема: Интернет - магазин и 1С


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.