我通过AJAX将表单域的内容POSTing到PHP脚本,然后使用JavaScript到escape(field_contents)
。问题是所有的加号都被去掉了,取而代之的是空格。如何安全地“编码”加号,然后在PHP端适当地“解码”它?
发布于 2009-09-03 16:20:25
在JS中使用encodeURIComponent()
,在PHP中应该收到正确的值。
注意:当你在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']; // "+"
只有原始HTTP请求包含url编码的数据。
对于GET请求,您可以从URI. $_SERVER['REQUEST_URI']
或$_SERVER['QUERY_STRING']
检索它。对于For编码的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')
它是表示UTF8中的Ā
的字节序列(\xc4\x80
)。因此,如果您使用encodeURIComponent()
,您的服务器端必须知道它正在接收UTF8。否则PHP会破坏编码。
发布于 2009-09-03 13:30:12
在JavaScript try中:
encodeURIComponent()
在PHP中:
urldecode($_POST['field']);
发布于 2015-03-07 06:18:05
让它变得更有趣,希望能让别人更少拉扯头发。使用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])
感谢这篇文章!
https://stackoverflow.com/questions/1373414
复制相似问题