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

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

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

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

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

web45

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вот нормально перекодирующая функция:
 
function win2utf($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;
}
 
 
А у меня другая проблема. Как передать строку с кирилицей из wap-броузера в пхп-скрипт?  Если передавать из поля postfield, латинские символы рисуются нормально, а все русские превращаются в символ "?". Может кто-то уже решал? Хелп ми плиз.

Всего записей: 1 | Зарегистр. 06-04-2004 | Отправлено: 14:02 06-04-2004
Mamay



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

Цитата:
чтобы скрипт сам конвертил текст из win-1251 в utf-8

накой ему чего-то конвертить?
делай контент в utf-8
неуж-то в падло хидер задать...

Цитата:
header("Content-Type: text/html; charset=utf-8");

 
Добавлено
web45
еще раз повторяю - если установить для страницы charset=utf-8 - то все что на ней отображается и все что она возвращает в постфилдах будет в utf-8....
Зачем чего-то куда-то перекодировать ???????????????????????

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 02:24 09-04-2004
Wadimus



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
S UTF-8 lichno u menja mnogo gemorroja vyhodilo, tak chto predlagaju svoju funkciju po perekodirovke v unicode.

Код:
 
function rus_wap($string)
{
$output = htmlentities($string, ENT_NOQUOTES, cp1251); // Kodiruem v HTML kodirovku. Poluchaem tipa &#1099;

$entities = array("&amp;", "&lt;", "&gt;");
$chars = array("&", "<", ">");
$output = str_replace($entities, $chars, $output);

$search = "/(&#\d{4};)/e";
$replace = "'&#x'.strtoupper(sprintf('%04s', base_convert(substr('\\1', 2, 4), 10, 16))).';'";
$output = preg_replace($search, $replace, $output);
return $output;
}
 

 
Deshego i serdito, rabotaet kak chasy:=)

Всего записей: 25 | Зарегистр. 21-07-2003 | Отправлено: 14:37 26-07-2004
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Надо еще предусмотреть вариант, когда QUERY_SYRING в виде hex-символов: %u043B%u0435...

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 18:24 26-07-2004
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
а как насчёт варианта - когда на сайт ломися несколько тысяч юзверей?
и для каждого перекодируются страницы?
 
как долго юзер будет ждать, если учесть ещё и тормознутость нашего GPRS-a...
 
а как насчёт арабских, ивритских, чувашских и прочих не агницких букв?
для них тоже такой перекодировщик писать?
 
Короче, решение ИМХО отдаёт гнилью...

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

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 21:31 28-07-2004 | Исправлено: Mamay, 21:33 28-07-2004
Wadimus



Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Hmm.  Vsja zhe perkodirovka prohodit na servere, i bystrodejstvie IMHO polnostju zavisit ot ego moshi.
 
Dlja arabskih i izhe s nimi pust' pridumyvajut oni zhe sani dlja svoego jazyka Ja ne pretendoval na absoljutnyj variant.
 
Ja konechno dumal chto v UTF-8 russkaja bukva kak-by odin simvol, a tut celyh 5 no ja ne sovsem znaju UTF-8, da i MTS na svoem sajte ispolzuet &#...  
 
Da i vrode v etoj teme nichego bolee prostogo ne  nahodilos'(krome iznachal'noj koditovki  v UTF)  
Esli chto, poprav'te

Всего записей: 25 | Зарегистр. 21-07-2003 | Отправлено: 12:47 29-07-2004
Mamay



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

Цитата:
Hmm.  Vsja zhe perkodirovka prohodit na servere, i bystrodejstvie IMHO polnostju zavisit ot ego moshi.

так-то оно так.
но есть одно НО...
 
вы протестируйте когда пару тысяч клиентов зайдут одновремено
IIS с Виндовсом2003 на 600 клиенте просто умирает - и мощность машыны - это уже другой вопрос...
 
Сам web сервер от таких потугов гнётся - и это только на статике.
А на динамике - да ещё и с перекодировками...
 
Мне по работе приходится писать для разных языков - очень разных...
Писал для немецкого, французского, арабского....
Так вот - кроме как UTF-8, ничего не спасает

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

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 13:39 29-07-2004
Kokoc

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

Цитата:
а как насчёт арабских, ивритских, чувашских и прочих не агницких букв?
для них тоже такой перекодировщик писать?  

 
Нет, речь идет только о кириллице!
Все равно надо как-то перекодировать запрос, если необходим, например, поиск в mysl, где данные хранятся в cp1251 или koi8.
Вот три примера запроса поиска (POST) от разных агентов:  
 
1)От реальной мобилы Motorola С350. Запрос приходит  в  UTF-8 как "РЎР°_Р" - по байтам это "\xD0\xA1\xD0\xB0\xD0\xB6...".  
2) Эмулятор wapsilon (www.wapsilon.com). Параметры кодируются unicode (не UTF-8!) - "%u043B%u0435%u0431%u0435%u0434"
3) WAPSimulator 1.0 использует обычную кодировку windows-1251
 
И что с таким винигретом делать?

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 22:34 29-07-2004 | Исправлено: Kokoc, 22:39 29-07-2004
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я вот сочинил "универсальный" перекодировкщик переменных, передаваемых методом POST (GET наверное тоже). Перекодирутся строки в формате UTF-8 (\xD0\xB2\xD0\xA1...), unicode (%u043B%u0435%u0431), ASCII ("ИВАНОВ"), url-encoded ("%C5%CE%CF").
Прочие кодировки кириллицы (koi8 и т.п.) не обрабатываются.

Код:
 
$win_utf = array( 'А' => 0x0410,  'Б' => 0x0411,  'В' => 0x0412, ..  и т.д. - сокращено. И так понятно.)
$utf_win=aray_flip($win_utf);
 
// Возвращает true, если unicode или false если ASCII
function detect_utf($str)
{
  $is_ascii=0; $is_utf=0;   $i=0;
  while($i<strlen($str)) {
    $byte1 = ord(substr($str,$i++,1));
    if(($byte1 & 0xF0) == 0xD0) {
      $byte2=ord(substr($str,$i++,1));
      if(($byte2 & 0xC0) == 0x80) {
        $is_utf++;
      } else { $is_ascii++; }
    } else   {   $is_ascii++; }
  }
  return ($is_utfi>$is_ascii);
}
 
function utf_rep16($e)
{
  global $utf_win;
  $c=intval($e[1],16);
  return (array_key_exists($c,$utf_win)) ? $utf_win[$c] : $e[1];
}
 
// Основная функция перекодировния. Параметр - значение переменной,
// переданной через POST или GET. Подразумевается, что присутствует только
// кириллица. Возвращает строку в кодировке windows-1251
function utf2win($ustr)
{
  global $win_utf, $utf_win;
  $ustr=rawurldecode($ustr);
  if(strstr($ustr,"%u")) {
    $out_str=preg_replace_callback("/%u([\d|A-F]{4})/","utf_rep16",$ustr);
  } else {
    if(detect_utf($ustr)) {
      if(function_exists("mb_convert_encoding")) {
        $out_str=mb_convert_encoding($ustr,"WINDOWS-1251","UTF-8");
      } else {
        $out_str="";
        $i=0;  
        while($i<strlen($ustr)) {
          $byte1=ord(substr($ustr,$i++,1));
          if(($byte1 & 0xF0) == 0xD0) {
            $byte2=ord(substr($ustr,$i++,1));
            $word = (($byte1 & 0x1F) << 6) + ($byte2 & 0x3F);
            if(array_key_exists($word,$utf_win)) {
              $out_str.=$utf_win[$word];
            } else {
              $out_str.='?';
            }
          } else {
            $out_str.=$byte1;
          }
        } // while
      }
    } else {
      $out_str=$ustr;
    }
  }  
  return $out_str;
}
 

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 16:35 30-07-2004
Mamay



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

Цитата:
например, поиск в mysl, где данные хранятся в cp1251 или koi8.  

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

Цитата:
2) Эмулятор wapsilon (www.wapsilon.com).

посмотрел и убедился что писан через задний проход
посмотри сюда wap3 MobileRunner

Цитата:
к сведению -  
я работаю на wap3

для тестирования лучше использовать NMIT 4.0 который написан фирмой производителем...
 
З.Ы.
Я устал бится головой о стену!
Больше в обсуждении этого вопроса я неучаствую!
надеюсь молодые(начинающие) разработчики ВНЕМЛЮТ ГОЛОСУ РАЗУМА...
 
Добавлено
кстати на сайте нашего эмулятора есть НЕПОЛНЫЙ список клиентов...
клиентами являются крупнейшие европейские операторы сотовой связи...

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

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 18:51 30-07-2004
SiMM

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

Цитата:
обьясни мне, пожалуйста, ЗАЧЕМ в базе хранить данные в кодировке отличной от той в которой выводится контент?
MySQL (старых версий), если не ошибаюсь, не поддерживал Unicode. Да и избыточность Unicode для одноязычного сайта очевидна.

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 09:45 31-07-2004
Kokoc

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

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 15:37 31-07-2004
ckayt

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не пониаю зачем ломать голову над добычей убогих онлайн вап-эмуляторов???
разве не достаточно старой доброй оперы и w3c-validator'а???
 
Добавлено

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

http://wap.maykop.org.ru/electro.wml
здесь ошибка. даже много. &lt;/br> - такого не должно быть. особенно в xml (wml)

Всего записей: 48 | Зарегистр. 11-03-2004 | Отправлено: 19:21 31-07-2004
Kokoc

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, действительно, с <br> ошибочки...
Спасибо.

Всего записей: 793 | Зарегистр. 06-06-2002 | Отправлено: 10:24 02-08-2004
Mamay



Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Kokoc
в WML 1.1 - тегов <table> НЕТ...

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

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 13:39 02-08-2004
Mamay



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

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

в wml ВСЕ таги должны закрыватся
<br> -> <br/>
<input ...> -> <input ... />
<img ...> -> <img ... />


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

Всего записей: 1352 | Зарегистр. 03-09-2002 | Отправлено: 16:18 04-08-2004
laigri

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Всего записей: 2302 | Зарегистр. 14-05-2004 | Отправлено: 20:18 11-01-2005 | Исправлено: SiMM, 20:19 11-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-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru