Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » WAP+PHP и русские буквы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6

Открыть новую тему     Написать ответ в эту тему

laigri

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM

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

Все, приехали. Я конечно понимаю, что я ничего не понимаю в кодировках, но что настолько... Помогите.
По моим предположениям в кодировке UTF-8, слово Программы выглядит следующим образом Программы
Это правильно? Это то что я думаю или Unicode.

Всего записей: 33 | Зарегистр. 07-01-2005 | Отправлено: 20:58 11-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
По моим предположениям в кодировке UTF-8, слово Программы выглядит следующим образом Программы
Это 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
PS: "почти" результат выполнения PHP-кода <?=bin2hex(iconv('Windows-1251','UTF-8','Программы'))?>

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:13 11-01-2005
laigri

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
А если отойти от PHP, то откуда тогда в обыкновенных wml страницах берут UTF-8

Всего записей: 33 | Зарегистр. 07-01-2005 | Отправлено: 00:18 12-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Конвертят. Например, тем же блокнотом (правда, эта зараза ещё три байта лишних вначале добавляет) - Файл=>Сохранить как=>UTF-8. Правда лично я не вижу особого смысла в статике

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 10:23 12-01-2005
zalexf



Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот этот код работает по адресу 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>"

Всего записей: 102 | Зарегистр. 21-10-2002 | Отправлено: 14:39 12-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Нате вам ещё один вариант
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;
}
 


----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 15:53 12-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
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;');
Результат вывода - всё что угодно - но не UTF-8.
Код:
echo wmldbstr('Программы');
Вывод - эта функция не преобразует Windows-1251 в UTF-8.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:21 12-01-2005 | Исправлено: SiMM, 16:28 12-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
SiMM
Не умничай, Да!
Функции можно передавать строку в любой кодировке...
А не набор кракозябл...

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 16:40 12-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mamay, а вы попробуйте её для начала (нафига я примеры приводил?). И потом - не зная из какой кодировки перевести в UTF-8 невозможно (я не говорю о HTML-евских наворотах типа &#КОД; и &#xКОД;).
PS: и, кстати, набор крякозябр обрабатывается при помощи $input_text= preg_replace_callback("|&#(\d{2,4};)|","_in_wmldbstr",$input_text); если я правильно понял вашу интерпретацию слова "крякозябры"

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:46 12-01-2005 | Исправлено: SiMM, 17:51 12-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
так вот на вход можно подавать арабские кодировки и всякие там ISO-xxxx...

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 18:08 12-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Mamay, да ну? Неужели я так много прошу? Я вам даже код привёл, который всего то нужно сCut&Paste'ть и убедиться, что никакой это не UTF-8 (не UTF-8 кириллицы). Как выглядит UTF-8 слова "Программы" я уже написал. И вообще - почему я должен вас уговаривать? Вы написали, что эта функция переводит ИЗ ЛЮБОЙ КОДИРОВКИ (что вообще невозожно, и этот факт очевиден даже малознакомому с предметом человеку) в UTF-8. И судя по всему, даже не удосужились убедиться, что это не так. Меня вообще поражает в этом коде глупость, с которой осуществляется chr($x) для $x>255. Я уж не говорю о том, что судя по всему вы до сих пор не догадались посмотреть в мануал по utf8_encode, чтобы осознать свою неправоту.
PS: есть ещё одно подмножествой забавных случаев, когда приведённая вами функция вообще ничего не сделает со входной строкой:
Код:
echo wmldbstr('- Рёва, - крикнул Саша вслед Маше.');
исходная кодировка - конечно же Windows-1251.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:14 12-01-2005 | Исправлено: SiMM, 02:00 13-01-2005
laigri

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
Спасибо, общая суть ясна.

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

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

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


Цитата:
UTF-8

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

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

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

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

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

Всего записей: 33 | Зарегистр. 07-01-2005 | Отправлено: 02:10 13-01-2005 | Исправлено: laigri, 17:50 13-01-2005
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
всё
я увял...
как приятно себя осознавать глупым и видеть что у себя всё работает, а у умных не всё и не всегда...
 
ВСЁ - больше в эту тему не смотрю....
Достала она меня окончательно

----------
Даже самый дурацкий замысел можно выполнить мастерски

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 12:32 13-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
А если не трудно можно еще ссылок на матчасть, желательно чтобы все описанные варианты
Как сделать многоязычную WWW страницу, там правда не описан вариант &#xШЕСТНАДЦАТЕРИЧНЫЙ_КОД; - но я думаю, это несущественно и непринципиально.
2Mamay, я бы советовал и вам с этим ознакомиться, дабы больше не витать в облаках и ощущать разницу между западноевропейской кодировкой ISO-8859-1 и кириллицей в Windows-1251.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 21:41 13-01-2005 | Исправлено: SiMM, 21:42 13-01-2005
laigri

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
Спаибо!

Всего записей: 33 | Зарегистр. 07-01-2005 | Отправлено: 01:43 14-01-2005
Gram



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Проблема такого плана: при отправке переменных из формы в скрипт передаются крякозябры. Проблема где-то в кодировке. Для нормального вывода у меня стоит кодировщик из русского текста в utf - преобразует к примеру буковку $buk["а"]="&#x0430;"; и т.д. А если все сделать так как сказал Mamay, т.е. писать страничку сразу в utf и ставить

Код:
<?xml version=\"1.0\" encoding=\"utf-8\"?>

то в скрипт передаются уже не крякозябры, а нормальные буковки (те, которые должны)... Может кто знает как решить проблему в моем случае? Кстати, если заполняю форму из Оперы или wap-эмулятора, то все работает, а вот если с мобилки - то крякозябры. Блин! Ну вот не хочу я скрипты сразу в utf писать и все. Хочу оставить так как у меня есть и чтоб все работало Или это unreal?

----------
Intellect Board | Miranda Gram Pack

Всего записей: 388 | Зарегистр. 22-01-2004 | Отправлено: 00:10 22-01-2005 | Исправлено: Gram, 00:11 22-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Gram, это уже было, просто указывать надо кодировку как в хидерах, так и в самом документе. Да и руками ничего делать не надо, если речь об одноязыковых страничках.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 16:41 22-01-2005 | Исправлено: SiMM, 16:43 22-01-2005
Gram



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поставил  
 

Код:
<?xml version=\"1.0\" encoding=\"windows-1251\"?>

и

Код:
header("Content-type: text/vnd.wap.wml; charset=windows-1251");

 
та же самая история...
 

Цитата:
Да и руками ничего делать не надо, если речь об одноязыковых страничках.

В смысле? У меня и на русском и на транслите странички выводятся.. а потому разные функции вывода....

----------
Intellect Board | Miranda Gram Pack

Всего записей: 388 | Зарегистр. 22-01-2004 | Отправлено: 02:58 23-01-2005
SiMM

Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
windows-1251
А с чего вы решили, что ваш телефон знает о существовании такой кодировки?

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 10:08 23-01-2005
Gram



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
SiMM
Сделал вот что:
 
1. Поставил
 

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

 

Код:
<?xml version=\"1.0\" encoding=\"UTF-8\"?>

 
2. Поменял преобразующую функцию на твою:
 

Код:
function CP1251toUTF8($str){ // (C) SiMM  
  static $table = array("\xA8" => "\xD0\x81", // Ё  
                        "\xB8" => "\xD1\x91", // ё  
                       );  
  return preg_replace('#[\x80-\xFF]#se',  
                      ' "$0" >= "\xF0" ? "\xD1".chr(ord("$0")-0x70) :  
                       ("$0" >= "\xC0" ? "\xD0".chr(ord("$0")-0x30) :  
                        (isset($table["$0"]) ? $table["$0"] : "")  
                       )',  
                      $str  
                     );  
}

 
В результате, проблема осталась... В скрипт все равно передается крякозябры...  
А еще в WinWAP такая страничка отображается некоректно (так же в виде крякозябр)...
Даже не знаю, что и делать...
 
Кстати - "&#1052;" - это буковка "М" - в какой кодировке?
 


----------
Intellect Board | Miranda Gram Pack

Всего записей: 388 | Зарегистр. 22-01-2004 | Отправлено: 12:36 23-01-2005
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6

Компьютерный форум Ru.Board » Интернет » Web-программирование » WAP+PHP и русские буквы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru