Необработанный код PHP не похож на escape-код JavaScripts!Зачем? - PullRequest
3 голосов
/ 03 февраля 2011

я понял, что когда я использовал urlencode или rawurlencode в PHP, кодирующий простой символ § (параграф), я получаю следующий результат: "% C2% A7".

Но когда я использую escape в Javascript для кодирования этого символа, я получаю только "% A7".

В этом случае у меня возникают проблемы с кодированием при отправке / получении данных между сервером, работающим на PHP, и клиентом javascript, пытающимся получить данные через ajax / jquery.

Я хочу написать любой текст, какой захочу. Для этого я кодирую текст и отправляю его в скрипт php бэкенда, экранируя данные и отправляя. Когда я получаю его, на стороне php я беру данные из mysql, делаю rawurlencode и отправляю их обратно.

Обе стороны, работают в режиме UTF-8. Функция jquery ajax вызывается с "contentType: application/x-www-form-urlencoded:charset=UTF-8", сервер mysql настроен для UTF-8 как для клиента, так и для сервера, а скрипт php начинает отображаться с header( "application/x-www-form-urlencoded:charset=UTF-8");

Почему PHP создает объект% C2, который генерирует символ на стороне JavaScript.

Может кто-нибудь помочь?

Ответы [ 2 ]

3 голосов
/ 03 февраля 2011

У меня была такая же проблема некоторое время назад, и я нашел решение:

function rawurlencode (str) {
    str = (str+'').toString();        
    return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').
                                                                                    replace(/\)/g, '%29').replace(/\*/g, '%2A');
}

Код взят здесь - http://phpjs.org/functions/rawurlencode:501 Надеюсь, это поможет.

3 голосов
/ 03 февраля 2011

Это явно кодировка:

[adrian@cheops3:~]> php -r 'echo rawurlencode(utf8_encode("§"));'
%C2%A7
[adrian@cheops3:~]> php -r 'echo rawurlencode("§");'
%A7

(терминал явно не работает в режиме utf8)

Если в вашем коде PHP есть литерал §, убедитесь, что php файл сохранен как UTF8.

...