Я отправляю содержимое поля формы через AJAX в сценарий PHP и использую JavaScript в escape(field_contents)
. Проблема в том, что все знаки плюса удаляются и заменяются пробелами. Как я могу безопасно «закодировать» знак «плюс», а затем соответствующим образом «декодировать» его на стороне PHP?
98
Ответы:
Используйте
encodeURIComponent()
в JS и PHP вы должны получить правильные значения.Примечание: При обращении
$_GET
,$_POST
или$_REQUEST
в PHP, вы запрашиваете значения , которые уже декодированы.Пример:
В вашем JS:
На вашем сервере:
Это только необработанный HTTP-запрос, который содержит данные в кодировке url.
Для запроса GET вы можете получить его из
URI. $_SERVER['REQUEST_URI']
или$_SERVER['QUERY_STRING']
. Для POST-запроса с URL-кодомfile_get_contents('php://stdin')
NB:
decode()
работает только для однобайтовых символов. Это не будет работать для всего диапазона UTF-8.например:
Примечание:
"%C4%80"
эквивалентно:escape('\xc4\x80')
Какая последовательность байтов (
\xc4\x80
) представляетĀ
в UTF-8. Поэтому, если вы используетеencodeURIComponent()
свою серверную часть, вы должны знать, что она получает UTF-8. В противном случае PHP будет искажать кодировку.источник
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
или<meta charset="UTF-8">
вы также можете установить его в PHP с HTTP-заголовком Content-Type.header('Content-Type: text/html;charset=UTF-8');
PS: & rsqo; не декодируется в браузере (FF3.5).В JavaScript попробуйте:
и в PHP:
источник
urldecode
также далеко, поскольку PHP будет декодировать его автоматически перед заполнением$_POST
.Шестнадцатеричное значение, которое вы ищете:
%2B
Чтобы получить это автоматически в PHP, пропустите вашу строку
urlencode($stringVal)
. А затем запустите его,urldecode($stringVal)
чтобы вернуть его.Если вы хотите, чтобы JavaScript обрабатывал это, используйтеescape( str )
редактировать
После комментария @bobince я прочитал больше, и он прав. Используйте
encodeURIComponent(str)
иdecodeURIComponent(str)
. Escape не преобразует символы, только экранировать их\
с помощьюисточник
escape
(илиunescape
) в JavaScript; они не совпадают с кодировкой URL и будут работать неправильно для + и любых символов Unicode, отличных от ASCII. encodeURIComponent / decodeURIComponent - это почти всегда то, что вам нужно.Чтобы сделать его более интересным и, надеюсь, позволить кому-то меньше выдергивать волосы. Используя python, построил словарь для устройства, которое мы можем использовать для настройки curl.
Проблема:
{"timezone":"+5"} //throws an error " 5"
Решение:
{"timezone":"%2B"+"5"} //Works
Итак, в двух словах:
Спасибо за этот пост!
источник
Если вам нужно выполнить завиток на php, вы должны использовать
urlencode()
PHP, но индивидуально!Если вы это сделаете
urlencode(strPOST)
, вы столкнетесь с другой проблемой, у вас будет один Item1 и & будет изменять значение% xx и будет как одно значение, см. Здесь возврат!Пример 1
Пример 2
Пример 1 - хороший способ подготовить строку для POST в curl
Пример 2 показывает, что рецептор не будет видеть равное и амперсанд, чтобы различать оба значения!
источник
моя проблема была с акцентами (á É ñ) и знаком плюс (+), когда я пытался сохранить "примеры кода" javascript в mysql:
мое решение (не лучший способ, но работает):
javascript:
функция для сохранения:
функция в php:
источник