WML: перекодировка пересылаемых полей

bunya

Guest
WML: перекодировка пересылаемых полей

Такая проблема
Пишу скрипт на php, формирую страничку WML, в ней есть поле input. Если в него забить русские буквы, то на выходе получается ерунда.
Помогите, чем можете
 

_Dio_

Новичок
так ты правильно укажи кодировку в заголовке
PHP:
$HEADER = "<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>";
в принципе не самый правильный путь, но работает.
А если уж хочешь совсем по правильному, то читай спецификацию
 

bunya

Guest
Автор оригинала: _Dio_
так ты правильно укажи кодировку в заголовке
PHP:
$HEADER = "<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>";
не помогает (вообще без изменений)

в принципе не самый правильный путь, но работает.
А если уж хочешь совсем по правильному, то читай спецификацию
а где можно посмотреть именно про пересылки русские полей серверу? в официальной спецификации не нашел
 

_Dio_

Новичок
Расскажи подробей где ты тестируешь все это?
На эмуляторе или мобиле ?
 

bunya

Guest
Автор оригинала: _Dio_
Расскажи подробей где ты тестируешь все это?
На эмуляторе или мобиле ?
и там, и там (сначала в седьмой Опере, потом на мобиле)
 

_Dio_

Новичок
мда, вспомнил, после пересылки выходит в другой кодировке.
Попробуй пхпшкой словить хидеры и посмотреть есть ли там кодировка. Если есть то переводи в нужную
 

bunya

Guest
пхп подключен через CGI апачевские функции не задействуешь, а через сниффер - в заголовках кодировки нет
 

bunya

Guest
куда хоть копать то на нем (в смысле запрос)
 

Ferr

Guest
Весь WAP построен на кодировке UTF-8, поэтому следует использовать функцию перекодировки из UTF-8 в WIN-1251.
Вот пример1:
PHP:
<?
function utf8win1251($s)
{
 $out='';
 $c1='';
 $byte2=false;
 $strleng=strlen($s);
 for ($c=0;$c<$strleng;$c++)
 {
  $i=ord($s[$c]);
  if ($i<=127) $out.=$s[$c];
  if ($byte2)
  {
   $new_c2=($c1&3)*64+($i&63);
   $new_c1=($c1>>2)&5;
   $new_i=$new_c1 * 256 + $new_c2;
   if ($new_i==1025) $out_i=168; else
   if ($new_i==1105) $out_i=184; else $out_i=($new_i - 848);
   $out.=chr($out_i);
   $byte2=false;
  }
  if(($i>>5)==6){ $c1=$i; $byte2=true; }
 }
 return $out;
}
?>
(не проверена мной, возможно содержит ошибки).


Пример 2:
(Через форум исказится скорее всего). Так как присутствуют прямые значения UTF. Скрипт немного неправильный, но работает отлично.
PHP:
<?
#-------- WIN-1251 --------!
#А,Б,В,Г,Д,Е,Ё,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я
#а,б,в,г,д,е,ё,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я
#!,@,#,$,%,&,*,-,=,+,-,\,/,',",<,>,[,],{,},?,~,;,:,(,),_,
#&#191;,&#161;,&#163;,&#164;,&#165;,?,©,&#167;,_,
#-------- UTF-8 -----------!
#Рђ,Р‘,Р’,Р“,Р”,Р•,РЃ,Р–,Р—,Р?,Р™,Рљ,Р›,Рњ,Рќ,Рћ,Рџ,Р_,РЎ,Рў,РЈ,Р¤,РҐ,Р¦,Р§,РЁ,Р©,РЄ,Р«,Р¬,Р_,Р®,РЇ
#Р°,Р±,РІ,Рі,Рґ,Рµ,С‘,Р¶,Р·,Рё,Р№,Рє,Р»,Рј,РЅ,Рѕ,Рї,СЂ,СЃ,С‚,Сѓ,С„,С…,С†,С‡,С?,С‰,СЉ,С‹,СЊ,СЌ,СЋ,СЏ
#!,@,#,$,%,&,*,-,=,+,-,\,/,',",<,>,[,],,,?,~,;,:,(,),_,
#Вї,ВЎ,ВЈ,В¤,ВҐ, 'в,¬' ,Г—,В§
function win_utf($frase)
{
 $win_cod=array('А','Б','В','Г','Д','Е','Ё','Ж','З','И','Й','К','Л','М','Н','О','П','Р','С','Т','У','Ф','Х','Ц','Ч','Ш','Щ','Ъ','Ы','Ь','Э','Ю','Я','а','б','в','г','д','е','ё','ж','з','и','й','к','л','м','н','о','п','р','с','т','у','ф','х','ц','ч','ш','щ','ъ','ы','ь','э','ю','я','&#191;','&#161;','&#163;','&#164;','&#165;','?','©','&#167;');
 $utf_cod=array('Рђ','Р‘','Р’','Р“','Р”','Р•','РЃ','Р–','Р—','Р?','Р™','Рљ','Р›','Рњ','Рќ','Рћ','Рџ','Р_','РЎ','Рў','РЈ','Р¤','РҐ','Р¦','Р§','РЁ','Р©','РЄ','Р«','Р¬','Р_','Р®','РЇ','Р°','Р±','РІ','Рі','Рґ','Рµ','С‘','Р¶','Р·','Рё','Р№','Рє','Р»','Рј','РЅ','Рѕ','Рї','СЂ','СЃ','С‚','Сѓ','С„','С…','С†','С‡','С?','С‰','СЉ','С‹','СЊ','СЌ','СЋ','СЏ','Вї','ВЎ','ВЈ','В¤','ВҐ','в,¬','Г—','В§');
 $kol_buk=count($win_cod);
 $kol_bukv=count($utf_cod);
 if($kol_buk == $kol_bukv)
 {
  for($i=0;$i<$kol_buk;$i++)
  {
   $frase=str_replace($utf_cod[$i],$win_cod[$i],$frase);
  }
 }
 else
 {
  return 'Nesovpadenie! (UTF-table !== WIN-table)';
 }
 return $frase;
}
?>
-~{}~ 27.05.04 15:53:

Автор оригинала: _Dio_
так ты правильно укажи кодировку в заголовке
PHP:
$HEADER = "<?xml version=\"1.0\" encoding=\"WINDOWS-1251\"?>";
в принципе не самый правильный путь, но работает.
А если уж хочешь совсем по правильному, то читай спецификацию
Работать это не будет явно, так как в мобильных устройствах нету поддержки такого количества кодировок, как в Эксплорере! Только в UTF-8 и какой-то ISO.
Расскажи подробей где ты тестируешь все это?
А какая разница?
тогда гугл тебе поможеь
А это обязательно писАть? :)
 
Сверху