$ _POST,$ _GET unescape转义查询字符

时间:2013-10-24 13:35:23

标签: php escaping

我有一个搜索字段,用户粘贴网址(网址是搜索查询)。大多数网址都运行良好,但有字符转义的网址正在“未转义”。例如:

当我从Chrome浏览器中复制一些网址时,我获得了转义网址: url =输入查询:'http://website.com/search/my%20query'

echo $ _POST ['q']〜结果是'http://website.com/search/my查询'

查询由$ .ajax提交:

var qurl = $("#url input[name=q]").val();
var queryString = "q="+qurl;

$.ajax({ 
url : "script.php", 
type: "POST", 
data: queryString,
.....
  1. 如何使用转义字符接收查询?
  2. 我应该自己打扰并处理(逃避查询的查询)查询网址吗?
  3. 魔术引用你关闭:

    php.ini
    
    magic_quotes_gpc=Off
    magic_quotes_runtime=Off
    magic_quotes_sybase=Off
    

1 个答案:

答案 0 :(得分:2)

你的问题有点细节,所以不幸的是,在这个答案中有一些猜测:

提交数据时,%中的%20应编码为%25(提供%2520)。

PHP将对其进行解码,以便在%20中为您提供$_POST

我以前从未听说过PHP对数据进行双重解码。所以听起来问题是,无论是什么使得请求都无法对数据进行编码。这很可能是因为没有使用常规表单来提交它而是使用JavaScript。

因此,解决方案是在JavaScript中正确编码。

例如:

data = "query=" + encodeURIComponent( document.getElementById('myInput').value );

更新以响应JavaScript添加到问题:

var qurl = $("#url input[name=q]").val();
var queryString = "q="+qurl;

我早先的猜测得到了证实。您尚未将数据编码为查询字符串的正确格式。由于您使用的是jQuery.ajax,您可以使用它来处理编码(通过传递数据对象),而不是手动构建查询字符串(然后传递字符串):

$.ajax({ 
url : "script.php", 
type: "POST", 
data: {
    q: $("#url input[name=q]").val()
},