我有一个搜索字段,用户粘贴网址(网址是搜索查询)。大多数网址都运行良好,但有字符转义的网址正在“未转义”。例如:
当我从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,
.....
魔术引用你关闭:
php.ini
magic_quotes_gpc=Off
magic_quotes_runtime=Off
magic_quotes_sybase=Off
答案 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()
},