AJAX POST和加号(+) – 如何编码?

我通过AJAX将表单字段的内容发布到PHP脚本并使用JavaScript进行escape(field_contents) 。 问题是任何加号都被剥离出来,换成空格。 我怎样才能安全地“encryption”加号,然后在PHP端正确地“解码”它?

在JS和PHP中使用encodeURIComponent(),你应该得到正确的值。

注意:当您访问PHP中的$_GET$_POST$_REQUEST时,您正在检索已经被解码的值。

例:

在你的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']; // "+" 

这只是包含url编码数据的原始HTTP请求。

对于GET请求,您可以从URI. $_SERVER['REQUEST_URI']检索这个URI. $_SERVER['REQUEST_URI'] URI. $_SERVER['REQUEST_URI']$_SERVER['QUERY_STRING'] 。 对于urlencoded POST, file_get_contents('php://stdin')

注意:

decode()仅适用于单字节编码字符。 它不适用于完整的UTF-8范围。

例如:

 text = "\u0100"; // Ā // incorrect escape(text); // %u0100 // correct encodeURIComponent(text); // "%C4%80" 

注意: "%C4%80"相当于: escape('\xc4\x80')

这是UTF-8中表示Â的字节序列( \xc4\x80 )。 所以如果你使用encodeURIComponent()你的服务器端必须知道它正在接收UTF-8。 否则PHP将破坏编码。

在JavaScript中尝试:

 encodeURIComponent() 

并在PHP中:

 urldecode($_POST['field']); 

您正在寻找的hex值是%2B

要在PHP中自动获取它,请通过urlencode($stringVal)运行您的string。 然后运行它rhde urldecode($stringVal)来取回它。

如果你想JavaScript来处理它,使用escape( str )

编辑

@ bobince的评论后,我做了更多的阅读,他是正确的。 使用encodeURIComponent(str)decodeURIComponent(str) 。 逃生不会转换字符,只能用\ s逃脱

为了使它更有趣,并希望能够减less为别人拉毛。 使用python,为我们可以使用curl来configuration的设备build立字典。

问题: {"timezone":"+5"} //throws an error " 5"

解决scheme: {"timezone":"%2B"+"5"} //Works

所以,简而言之:

 var = {"timezone":"%2B"+"5"} json = JSONEncoder().encode(var) subprocess.call(["curl",ipaddress,"-XPUT","-d","data="+json]) 

感谢这个职位!

如果你必须在PHP中做一个curl,你应该使用PHP中的urlencode() ,但是单独使用!

 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中为POST准备string的好方法

例2表明,受体将不会看到等号和&符号来区分这两个值!

我的问题是与口音(áÉñ)和加号(+)当我试图保存JavaScript的“代码示例”到MySQL:

我的解决scheme(不是更好的方法,但它的工作原理):

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保存:

 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'"); } ?>