Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: RPC-XML и проблемы с кодировкой

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Kubig
Отправлено: 03 Июля, 2010 - 17:21:38
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




Создаю массив
PHP:
скопировать код в буфер обмена
  1. $params = array(
  2.   "username" => $login,
  3.   "password" => $password,
  4.   "event" => $body, //Данные в кириллице
  5.   "subject" => $title, //Данные в кириллице
  6. bla-bla-bla
  7. );
  8.  


передаю данные вот таким вот образом
PHP:
скопировать код в буфер обмена
  1. $request = xmlrpc_encode_request('LJ.XMLRPC.postevent', $params);
  2. $curl = curl_init("http://server.ru/xmlrpc");
  3. curl_setopt($curl, CURLOPT_POSTFIELDS, $request);
  4. curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
  5. curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  6. curl_setopt($curl, CURLOPT_TIMEOUT, 30);
  7. curl_exec($curl);
  8. curl_close($curl);


на выходи получается вот такая фигня например
Цитата:
Теперь по русски тестим


Что делать? Подставлял по разному iconv(); и к переменным и к массиву и уже не знаю как ещё. Вообще есть функция которая всё содиржимое массива сможет перевести в UTF-8? Или может мне в другую сторону дуть надо. Подскажите пожалуйста.


P.S.
Поиск юзал по словам кодировка, нечего подходящего не нашёл.
 
 Top
JustUserR
Отправлено: 04 Июля, 2010 - 01:50:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Kubig пишет:
На выходи получается вот такая фигня например
В вашем случае скорее всего причиной искажения кодировки является функция xmlrpc_encode_request - например по причине того что она тракрует данные в строго определенной кодировке или неправильно установлена локаль PHP-скрипта При неправильно установленной локали PHP-скрипт в принципе может работать нормально и выводить данные в кодировке без искажений - за счет того что все строковые константы в нем и сторонние запрашиваемые данные находятся в одной и той же кодировке которая также указана в Content-type выводмого документа Однако если внутри PHP-скрипта используются какие-то функции для работы со строками то они для правильной работы должны знать их кодировку - что обеспечивается установкой соответствущей локали
Можете попробовать перекодировать исходные данные подставляемые в функцию xmlrpc_encode_request и отдельно ее результата - при этом первая кодировка будет использовать как кодировка переданных данных для XMLRPC-сервера - а вторая как кодировка из которой CURL будет преобразовывать данные в 7bit-ный формат для передачи по HTTP-протоколу Также для перекодировки можно использовать функцию mb_convert_string


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Kubig
Отправлено: 04 Июля, 2010 - 11:23:46
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Март 2010  


Помог: 0 раз(а)




угу, спасибо добрый человек... Значит мне сейчас надо разобраться что такое локали скрипта, затем пробывать их настроить, после этого Я должен сделать вот это, но что то пока не совсем понял что... перекодировать массив до того как он попадёт в xmlrpc_encode_request, а затем уже перекодировать переменную после обработки xmlrpc_encode_request? Что то совсем нечего не понял...

Цитата:
перекодировать исходные данные подставляемые в функцию xmlrpc_encode_request и отдельно ее результата - при этом первая кодировка будет использовать как кодировка переданных данных для XMLRPC-сервера - а вторая как кодировка из которой CURL будет преобразовывать данные в 7bit-ный формат для передачи по HTTP-протоколу


Кстати передать данные с помощью cURL Я пробывал именно вот с таким параметром.
curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-Type: text/xml; charset=utf8"));

Вообще все эти данные должны передаваться на страницы где utf8 прописан. Кстати сам фаил скрипта должен быть в какой то определённой кодировке, у меня notepad2 Я выбираю там Фаил => Кодировка => UTF8 и всё та же бяка.
 
 Top
JustUserR
Отправлено: 05 Июля, 2010 - 01:33:23
Post Id



Активный участник


Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009  


Помог: 17 раз(а)




Kubig пишет:
Угу, спасибо добрый человек... Значит мне сейчас надо разобраться что такое локали скрипта, затем пробывать их настроить, после этого Я должен сделать вот это, но что то пока не совсем понял что... перекодировать массив до того как он попадёт в xmlrpc_encode_request, а затем уже перекодировать переменную после обработки xmlrpc_encode_request? Что то совсем нечего не понял...
Пожалуйста! В большинстве случае для того чтобы решить проблемы с неправильным отображением кодировки - достаточно установить одинаковое ее значение для всех источников и обработчиков данных Однако в некоторых случаях например когда установлена некорректная локаль или же определенные функции и библиотеки работают строго с одной кодировкой или выполняют принудительную перекодировку - то простое упорядочивание кодовых страниц не помогает Тем не менее существует достаточно универсальный метод для обхода таких функций - а именно ручная перекодировка данных для ее входа и выхода - правда если функция использовала экранирование или шифрование то это может дать дополнительные трудности - ведь выходной текст нельзя однозначно подвергать перекодировке поскольку преобразованные данные от входящего текста и дополнительные символы по сути находятся в разных кодировках
В вашем случае порядок дейтсвий может быть следующим - сначала вы проверяете что все данные в том числе строковые константы в исходном PHP-коде и получаемые значения имеют одну и ту же кодировку UTF-8 - затем выводите на экран результат работы функции xmlrpc_encode_request и смотрите как выглядят данные в полученной XML-структуре и какая в ней указана кодировка Если вдруг генерируемые данной функцией данные уже не соответствуют исходной кодировке - то выполняете предварительное преобразование данных чтобы входной текст находится в той же используемой функцией внутренней кодировке - и конечную перекодировку для возврата результирующих данных в кодировку PHP-скрипта
Далее для всех HTTP-запросов явно установите используемую кодировку - это и Content-Type для всех POST-запросов и их возможных multipart-частей - и заголовки группы Accept по которым удаленный web-сервер определяет трактование пришедших данных в определенной кодировке Здесь хорошо описано как Apache поэтапно определяет входящую кодировку http://www[dot]spectrauto[dot]ru/manual/[dot][dot][dot]negotiation[dot]html И в конце необходимо проверить в какой кодировке вернул CURL-запрос удаленный web-сервер - и сделать дополнительное преобразование кодировки если потребуется


-----
Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик Улыбка
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB