AJAX를 통해 양식 필드의 내용을 PHP 스크립트에 게시하고 JavaScript의 이스케이프(field_contents)를 사용하여 이스케이프하고 있습니다. 문제는 모든 더하기 기호가 제거되고 공백으로 대체된다는 것입니다. 더하기 기호를 안전하게 "인코딩"하고 PHP 측에서 적절하게 "디코딩"하려면 어떻게 해야 합니까?
在JS中使用encodeURIComponent(),在PHP中你应该能够正确接收到值。
注意:当你在PHP中访问$_GET、$_POST或$_REQUEST时,你获取到的是已经解码过的值。
例子
在你的JS中:
// 对字符串进行URL编码 var string = encodeURIComponent('+'); // "%2B" // 发送到服务器 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']。对于URL编码的POST请求,可以使用file_get_contents('php://stdin')。
注意:
decode()只适用于单字节编码字符。对于完整的UTF-8范围,它将无效。
例如:
text = "\u0100"; // Ā // 错误的方式 escape(text); // %u0100 // 正确的方式 encodeURIComponent(text); // "%C4%80"
注意:"%C4%80"等同于:escape('\xc4\x80')
'\xc4\x80'是UTF-8中表示Ā的字节序列。因此,如果你使用encodeURIComponent(),你的服务器端必须知道它正在接收UTF-8编码。否则,PHP将破坏编码。在JavaScript中尝试:
encodeURIComponent()
在PHP中使用:
urldecode($_POST['field']);
在JS中使用encodeURIComponent(),在PHP中你应该能够正确接收到值。
注意:当你在PHP中访问$_GET、$_POST或$_REQUEST时,你获取到的是已经解码过的值。
例子
在你的JS中:
在你的服务器端:
只有原始的HTTP请求包含了URL编码的数据。
对于GET请求,你可以从URI中获取。$_SERVER['REQUEST_URI']或$_SERVER['QUERY_STRING']。对于URL编码的POST请求,可以使用file_get_contents('php://stdin')。
注意:
decode()只适用于单字节编码字符。对于完整的UTF-8范围,它将无效。
例如:
注意:"%C4%80"等同于:escape('\xc4\x80')
'\xc4\x80'是UTF-8中表示Ā的字节序列。因此,如果你使用encodeURIComponent(),你的服务器端必须知道它正在接收UTF-8编码。否则,PHP将破坏编码。
在JavaScript中尝试:
在PHP中使用: