декодирование в php после javascript:encode
при передаче данных в XMLHTTPRequest из javascript русские символы из кодировки 1251 приходят в php в некоей кодировке, которую называют iso8859-1 (в доках по php), хотя на самом деле русские символы присутствуют только в iso8859-5. может это и одно и то же, однако обратно они приходят в ней же, а нифига не в 1251. iconv и прочие конверторы использовать не имею ни желания ни возможности - на локальной машине их нет, а я добавлять чего-либо не умею и не надо меня этому учить. а на сервере и играться как-то кощунственно и туда тоже надо доставлять дополнительные расширения. потом... возможно ведь и использование пользователями других символов, которые не будут входить уже в iso8859-5. следовательно перед отправкой я делаю строке encode в javascript`е. все символы (русские) приходят в виде %u0... для их переконвертации я написал свой обработчик:
PHP код:
- пропадает символ '+' (плюс) - передается в виде пробела :( - все-таки хотелось бы нечто универсальное для любого юникода - не только кирилистического - вычислять разницу в кодах символов разных кодировок, я так понял, глупо... этим уменьшится только количество строк php, а не логика зы без encode не могу - всё после символа & пропадает как новая переменная - как при методе get |
VeshchiyOleg про локаль не забываем...
PHP код:
|
да я пробовал локаль прописывать в .htaccess - не помогло
а куда это засунуть??? в начало скрипта??? или можно непосредственно перед обращением к переменной??? и что делать, если текст пришел уже в виде %u0...??? |
|
setlocale после escape не помогает
setlocale вообще не помогает!!! после отправки текста (без escape) АБВГДЕЁЖЗИЙКЛМН приходит АБВГДЕЁЖЗР?ЙКЛМН т.е. опять невесть в чем!!! у меня возникла идея, как это сделать, но не хватает опыта: после escape символы приходят в виде %u0410 - (заглавное А на кирилице) 0410 - это не что иное как шестнадцатеричный код символа т.е. если мы пересчитаем 0410 из шестнадцатеричного в десятичное число, то получим 1040 короче если привести %u0410 к виду А то мы получим не что иное, как нормальную html-сущность символа А на кирилице а если после этого сделать еще и Цитата:
вопрос КАК ЭТО СДЕЛАТЬ на php??? остается открытым вопрос: как передавать плюсы с использованием encode??? |
VeshchiyOleg а как же rawurldecode()? Есть еще urldecode() но она afaik плюс в пробел декодит..
|
javascript:escape('АБВ') == '%u0410%u0411%u0412'
urldecode('%u0410%u0411%u0412') == '%u0410%u0411%u0412' rawurldecode('%u0410%u0411%u0412') == '%u0410%u0411%u0412' всё не то!!! я тут сделал функцию всё супер с одним но... html_entity_decode не работает как я думал PHP код:
на экране всё классно, но мне надо бы еще с текстом поработать прежде чем выводить что делать дальше??? как перевести это в нормальные буквы??? |
VeshchiyOleg
Цитата:
|
Цитата:
джаваскриптовский escape приводит не к виду % и следом за ним две шестнадцатеричные цифры, а % потом u и потом ЧЕТЫРЕ шестнадцатеричные цифры!!! а если не преобразовывать, то получается вообще какая-то абракадабра, которая никак не обрабатывается, кроме как заменой двух символов на один (см. первый пост вторую половину скрипта) так что rawurldecode у меня ничего не меняет. ВООБЩЕ!!! я тут стал копать глубже оказывается, эта трабла возникает только при методе POST при GET всё ок (без escape) я использую для ajax`а библиотеку prototype.js v 1.4.0 там при POST отправляются следующие заголовки: X-Requested-With:XMLHttpRequest X-Prototype-Version:Prototype.Version Content-type:application/x-www-form-urlencoded Connection:close потом собсна тело запроса может тут собака порылась??? я уж в контент-тип и кодировку прописывал читал статью http://phpclub.ru/detail/article/http_request интересно, но вроде всё правильно... за исключением того, что имитация POST`а какая-то кривая насчет русских символов :( |
VeshchiyOleg
Цитата:
|
Цитата:
Насколько я помню в utf-8 |
1. а есть ли в javascript функция, которая переведет мне букву 'а' в '%D0%B0'???
ну и ВСЕ остальные буквы естессно (ну неужели нельзя обойтись без массива??? неужели нет четкого алгоритма???) 2. может есть в php функция, которая переведет 'А' в 'А'??? или тоже без массива не обойтись??? Цитата:
пусть в ней - мне все равно!!! как ее перевести в удобоваримый текст средствами php??? |
Поглядите готовую реализацию, внимательно поглядывая комментарии. Метод JsHttpRequest::ucs2EntitiesDecode, имхо, то что Вам необходимо.
|
VeshchiyOleg у тебя уже каша в голове :)
Цитата:
Цитата:
|
Цитата:
Цитата:
PHP код:
Цитата:
а если это немец и он по-немецки пишет??? его каракули не переведутся и съедут в крякозяблы!!! |
VeshchiyOleg ты меня удивляешь...
вставь этот код, и посмотри, что получится... :) PHP код:
|
гыыы
написало... :))) |
Цитата:
итого функция принимает вид PHP код:
|
VeshchiyOleg, а где rawurldecode? Чем будешь пробелы и пр. небуквенные символы (%хх) раскодировать?
|
Время: 08:13. |
Время: 08:13.
© OSzone.net 2001-