0

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

当我从 Chrome 浏览器复制一些 url 时,我得到了转义 url: url = input query : ' http://website.com/search/my%20query '

echo $_POST['q'] ~ 结果是' http://website.com/search/my query'

查询由 $.ajax 提交:

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
4

1 回答 1

2

你的问题有点缺乏细节,所以不幸的是,这个答案有很多猜测:

提交数据时,应将%in编码为(giving )。%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()
},
于 2013-10-24T13:40:25.977 回答