2013-10-24 52 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