2011-02-03 1 views
3

Я понял, когда использовал urlencode или rawurlencode в PHP, кодирующем простой символ § (параграф), я получаю следующий результат: «% C2% A7».PHP-код rawurlencode не равен побегам JavaScripts! Зачем?

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

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

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

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

Почему РНР производит что% C2 вещь, которая генерирует символ на JavaScript боковая сторона.

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

+0

Глядя на [PHP docs] (http://php.net/manual/en/function.urlencode.php), пользователь с именем omid [имел ту же проблему] (http: //www.php. нетто/ручной/EN/function.urlencode.php # 96394). –

ответ

3

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

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 Надеюсь, что это помогает.

+0

Спасибо за эту информацию. Но это для стороны javascript. Сторона javascript выглядит нормально, так как данные правильно хранятся в моей mysql db. Извлечение его с моей стороны php - проблема. Так что мне нужно что-то в PHP, чтобы получить правильную кодировку для § – NovumCoder

+0

ах дерьмо, только что получил. Мне нужно использовать encodeURIComponent и decodeURIComponent. Тогда кодирование и декодирование отлично работают между javascript и php. Ваш rawurlencode правильный, спасибо Радослав. – NovumCoder

3

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

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

(терминал, очевидно, не работает в режиме utf8)

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

+0

Интересно. Итак, в вашем случае rawurlencode («§»); возвращается только% A7. Но в моем случае я получаю% C2% A7. И вы думаете, что это происходит из моей кодировки php-файлов. Как я могу проверить кодировку файлов? Дело даже в моем терминале, я получаю% C2% A7. Так мой терминал не-utf8? как я могу быть уверен, что его чистый utf8. моя кодировка терминалов установлена ​​на utf-8. – NovumCoder

+0

Hm ok, я сделал это: php -r 'echo rawurlencode (utf8_decode ("§")); И он вернул только% A7. Что это значит? – NovumCoder

+0

Если вы получаете% C2% A7, это UTF8; Если это не так, вы получаете% A7. Если вы используете vim, вы можете установить кодировку файла, используя ': set fenc = utf8' (или latin1) – ThiefMaster

 Смежные вопросы

  • Нет связанных вопросов^_^