The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
CGI проблема с кодировкой запроса, !*! siesit, 18-Янв-11, 11:41  [смотреть все]
Друзья помогите, совсем запарился с кодировкой, начну по порядку:
Виндовый хостинг
сайт в UTF8
CGI приложение принимает запрос полученный скажем через $REQUEST_URI вот это*:
%D1%82%D1%83%D1%82_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE_%D1%81%D0%B0%D0%BC_%D0%B7%D0%B0%D0%BF%D1%80%D0%BE%D1%81
после декодирования (URLDecoder) получаю это*:
тут_собственно_сам_запрос
вот этим (в разных вариациях) пытаюсь привести в нормальный вид но все тщетно  :xz:


Procedure.s Unicode2Ansi(*Unicode,UniLen.l)
  ;/ *Unicode [in]  Points To the wide-character string To be converted.
  ;/ UniLen   [in]  Specifies the number of wide characters in the string pointed to by the lpWideCharStr parameter. If this value is -1, the string is assumed to be null-terminated and the length is calculated automatically. The length will include the null-terminator.
  ;/ string   [out] The translated (ANSI) string.
  Protected Ansi.s,AnsiLen.l
  AnsiLen = WideCharToMultiByte_(#CP_ACP,0,*Unicode,UniLen,0,AnsiLen,0,0)
  If AnsiLen
    Ansi = Space(AnsiLen)
    If WideCharToMultiByte_(#CP_ACP,0,*Unicode,UniLen,@Ansi,AnsiLen,0,0);"•",#True)
      ProcedureReturn Ansi
    EndIf
  EndIf
  ProcedureReturn ""
EndProcedure

самое интересное что $SCRIPT_NAME приходит в нормальной кодировке, проблема наблюдается только в POST\GET запросах

1) как можно это преобразовать?
2) может апачка криво настроена?

  • CGI проблема с кодировкой запроса, !*! siesit, 11:11 , 19-Янв-11 (1)
    проблему преобразования решил следующим кодом:

    Procedure.s UTF8toMB(U2S.s)
    #CP_UTF8=65001
    *u2s_out = AllocateMemory(1024)
    l = MultiByteToWideChar_(#CP_UTF8,0,@U2S,-1,0,0)
    l = MultiByteToWideChar_(#CP_UTF8,0,@U2S,-1,*u2s_out,l)
    l = WideCharToMultiByte_(#CP_ACP,0,*u2s_out,-1,0,0,0,0)
    u2s_out2.s = Space(l)
    l = WideCharToMultiByte_(#CP_ACP,0,*u2s_out,-1,@u2s_out2,l,0,0)
    FreeMemory(*u2s_out)
    ProcedureReturn u2s_out2
    EndProcedure

    Спасибо!




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру