AJAX POST и знак плюс ( + ) - как кодировать?
Я отправляю содержимое поля формы через AJAX в php-скрипт и использую JavaScript для escape(field_contents). Проблема в том, что любые знаки плюса удаляются и заменяются пробелами. Как я могу безопасно "кодировать" знак плюс, а затем соответствующим образом "декодировать" его на стороне PHP?
6 ответов:
использовать
encodeURIComponent()в JS и PHP вы должны получить правильные значения.Примечание: при доступе к
$_GET,$_POSTили$_REQUESTв PHP вы получаете значения, которые уже были декодированы.пример:
в вашем JS:
// url encode your string var string = encodeURIComponent('+'); // "%2B" // send it to your server window.location = 'http://example.com/?string='+string; // http://example.com/?string=%2Bна сервере:
echo $_GET['string']; // "+"это только необработанный HTTP-запрос, который содержит данные в кодировке url.
для запроса GET вы можете получить это из
URI. $_SERVER['REQUEST_URI']или$_SERVER['QUERY_STRING']. Для urlencoded сообщение,file_get_contents('php://stdin')Примечание:
decode()работает только для однобайтовых закодированных символов. Он не будет работать для полного диапазона UTF-8.например:
text = "\u0100"; // Ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80"Примечание:
"%C4%80"эквивалентно:escape('\xc4\x80')что такое последовательность байтов (
\xc4\x80) что представляет собойĀв UTF-8. Так что если вы используетеencodeURIComponent()ваша серверная сторона должна знать, что она получает UTF-8. В противном случае PHP будет калечить кодирование.
шестнадцатеричное значение, которое вы ищете,
%2Bчтобы получить его автоматически в PHP запустите строку через
urlencode($stringVal). А потом запустить его Roughurldecode($stringVal), чтобы получить его обратно.
если вы хотите, чтобы JavaScript обрабатывал его, используйтеescape( str )Edit
после комментария @bobince я сделал больше чтения, и он прав. Используйте
encodeURIComponent(str)иdecodeURIComponent(str). Escape не будет конвертировать символы, только избежать их с помощью\' s
чтобы сделать его более интересным и, надеюсь, позволит меньше волос тянуть за кого-то еще. Используя python, встроенный словарь для устройства, которое мы можем использовать curl для настройки.
:{"timezone":"+5"} //throws an error " 5"устранение:
{"timezone":"%2B"+"5"} //WorksТак, в двух словах:
var = {"timezone":"%2B"+"5"} json = JSONEncoder().encode(var) subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json])Спасибо за этот пост!
Если вам нужно сделать curl в PHP, вы должны использовать
urlencode()из PHP, но индивидуально!strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+")если у вас
urlencode(strPOST), вы принесете вам другую проблему, у вас будет один Item1 и & будет изменение %xx значение и быть как одно значение, см. здесь возврат!Пример 1
$strPOST = "Item1=" . $Value1 . "&Item2=" . urlencode("+") will give Item1=Value1&Item2=%2BПример 2
$strPOST = urlencode("Item1=" . $Value1 . "&Item2=+") will give Item1%3DValue1%26Item2%3D%2BПример 1-это хороший способ подготовить строку для записи в curl
Пример 2 показывает, что рецептор не будет видеть равный и амперсанд, чтобы различать оба значения!
моя проблема была с акцентами (á É ñ) и знаком плюс ( + ), когда я пытался сохранить javascript "примеры кода" в mysql:
мое решение (не лучший способ, но он работает):
javascript:
сохранить:function replaceAll( text, busca, reemplaza ){ while (text.toString().indexOf(busca) != -1) text = text.toString().replace(busca,reemplaza);return text; } function cleanCode(cod){ code = replaceAll(cod , "|", "{1}" ); // error | palos de explode en java code = replaceAll(code, "+", "{0}" ); // error con los signos mas return code; }function save(pid,code){ code = cleanCode(code); // fix sign + and | code = escape(code); // fix accents var url = 'editor.php'; var variables = 'op=save'; var myData = variables +'&code='+ code +'&pid='+ pid +'&newdate=' +(new Date()).getTime(); var result = null; $.ajax({ datatype : "html", data: myData, url: url, success : function(result) { alert(result); // result ok }, }); } // end functionфункция в php:
<?php function save($pid,$code){ $code= preg_replace("[\{1\}]","|",$code); $code= preg_replace("[\{0\}]","+",$code); mysql_query("update table set code= '" . mysql_real_escape_string($code) . "' where pid='$pid'"); } ?>
Comments