Некоректное обратное преоброзавание rawurlencode() -> decodeURI() + UTF-8

ast-ross

Новичок
Некоректное обратное преоброзавание rawurlencode() -> decodeURI() + UTF-8

Пишу приложение с использованием Ajax, везде кодировка UTF-8, есть проблемы:

На PHP строку кодирую: rawurlencode('Проверка : . ,');
В JS расшифровываю пр помощи decodeURI()

Не декодируются некоторые символы, вот что получаю:

Проверка %3А . %2С

Если на стороне PHP использовать urlencode() то получаю:

Проверка+%3А+.+%2С

Неужели на стороне JS придеться писать функцию подмены символов, которые decodeURI() не смог декодировать???

Как то коряво...

-~{}~ 01.12.07 15:09:

Все, разобрался:
На стороне JS надо вместо decodeURI() использовать decodeURIComponent();

Извиняюсь за бестолковую тему... Хотя может кому поиском и придет...
 

Farsh

~ on ~ high ~ wave ~
Во во .
Было дело =)) Сам не понимал .
Передача данных в xml , я прав ?

-~{}~ 03.12.07 03:14:

Ой , не дочитал до конца :D
А у меня проблема была при передаче url через xml .
Енкодил при помощи rawurlencode , так как xml напрочь отказывается принимать '&' . Декодил при помощи decodeURIComponent , но был трабл , что одни и теже урлы иногда декодировались нормально , а иногда выдавалась ошибка декодирования , бред -.-
Я и забил , и просто реплейсом заменил этот символ .
 

Wicked

Новичок
Farsh
ты поди и зубы чистишь щеткой для обуви?

когда тебе нужно работать с XML, неплохо бы использовать средства для работы именно с XML, такие как xmlwriter, simplexml, dom.
 

Farsh

~ on ~ high ~ wave ~
Wicked
На стороне сервера или клиента ? Если сервера , то в чем смысл? Я могу его сгенерить как и обычно , так и всякими хренями типо DOM . А на стороне клиента как раз DOMом и разбирается
 

Wicked

Новичок
Что значит "как и обычно"? Сборка конкатенацией с применением rawurlencode() для эскейпинга? :)
 

Farsh

~ on ~ high ~ wave ~
да :) А как надо ? Просто времени не особо было разбираться.

-~{}~ 03.12.07 13:53:

Нет , просто лучше скажи , в чем ошибка .
Стоит ли в такой ситуации генерировать xml домом ?
 

Wicked

Новичок
ошибка в том, что rawurlencode предназначена совсем для другого - для эскейпинга данных для урлов. Ты же не будешь данные для вывода в html эскейпить с помощью mysql_escape_string()? Вот и тут не нужно использовать rawurlencode.

Генерировать xml стоит теми средствами, которые будут производить минимальный валидный xml. Т.е. эскейпить только те символы, которые нужно. Разумеется, в соответствии с кодировкой xml и т.д. Больше всего для этого подходит DOM. Но поскольку он довольно медленный и громоздкий, лучше использовать его более легкие альтернативы - simplexml, xmlwriter.

Иначе будет как говорил мой наставник:
ну а если ты руками генерируешь XML как текст, то у тебя всегда будут инъекции и прочее г#вно :)
 

Farsh

~ on ~ high ~ wave ~
У меня такой вопрос .
Дана строка , которая закодирована как то неправильно, например :
%C2%EE%E9%F2%E0%EA
Но проблема в том , что эта строка никак не декодится при помощи яваскрипта . decodeURI и decodeURIComponent возвращает ошибку .
И , в чем суть самой проблемы , никак не передается через аякс .
На стороне сервера она нормально декодируется при помощи urldecode и rawurldecode .
Что можно сделать ?
 
Сверху