2013-10-24 56 views
0

我有一个用户粘贴URL(url是搜索查询)的搜索字段。大多数网址都可以正常工作,但带有转义字符的网址会“未转义”。例如:

当我复制从Chrome浏览器的一些网址,我得到逃出网址: URL =输入查询: 'http://website.com/search/my%20query'

回声$ _ POST [ 'Q'] - 结果是 'http://website.com/search/my查询'

提交查询由$阿贾克斯:

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

$.ajax({ 
url : "script.php", 
type: "POST", 
data: queryString, 
..... 
  1. 我怎样才能收到与转义字符的查询?
  2. 我应该打扰并处理(转义查询的查询)查询网址吗?

魔术引号你关:

php.ini 

magic_quotes_gpc=Off 
magic_quotes_runtime=Off 
magic_quotes_sybase=Off 

回答

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() 
}, 
+0

谢谢你,这是现在工作。现在我更了解了什么逃避了什么。 – gskema