我有一個頁面,使aqui jquery調用接收多個維基百科網址。然後我從 從url中提取文章名稱(即從http://en.wikipedia.org/science
等獲得science
),爲每個單詞添加單引號('),將它們串在一起並最終將它們發送到一個php頁面,這會使得調用mysql select * from MyTable where title in('name1','name2','name3','name4')
。當文章名稱中有單引號(即「希克定律」)時,就會出現問題,因爲它打破了單引號。下面是我使用的代碼:如何在此場景中轉義單引號?
$.getJSON('http://ajax.googleapis.com/ajax/services/search/web?q=keyword site:en.wikipedia.org&rsz=8&v=1.0&callback=?',
function (r) {
var urls1="";
$.each(r.responseData.results, function(i, item) {
var thisurl = (i==0) ? "'" + item.url.substring(item.url.lastIndexOf('/') + 1) + "'" : ",'" + item.url.substring(item.url.lastIndexOf('/') + 1) + "'";
urls1 += thisurl.replace(/_/g,'%20');
});});
$('#quotes').html($('<div>').load('pr.php?s='+urls1 +' #quotes', function() {}
我加入了單引號的文章的名稱,以便該字符串應該是所有準備去mysql的where in
。
因此,要回顧一下,步驟如下:
- 調用API,並得到多個維基百科的網址,
- 從每個網址,以獲取文章的名字,
- 將它們添加到
urls1
串同時用空格替換下劃線 - 通過ajax發送
urls1
字符串到pr.php頁面。 - 在pr.php我做了以下內容:
"SELECT * FROM MyTable WHERE title in".$_GET['s']
我想這樣做mysql_real_escape_string($_GET['s'])
,但沒有奏效。
我現在試圖轉義文章名稱內的任何單引號,因此where in
不會中斷,但它不起作用。我試圖改變上述
var thisurl=(i==0) ? "'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'":",'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'";
但它沒有奏效。有任何想法嗎?
TIA!
[大逃避現實(或:你需要知道的工作,文本中的文字)](HTTP:// kunststube。淨/逃避現實/) – deceze 2013-03-07 13:01:29
你爲什麼試圖逃避使用JS?你應該用PHP轉義 – JamesHalsall 2013-03-07 13:01:41
你通過一個URL傳遞了一半的SQL語句嗎?聽起來很糟糕,容易出錯,而且顯然是錯誤的。發送json返回到PHP,使用json_encode/json_decode,並處理轉義的服務器端(例如通過使用參數化查詢) – Mahn 2013-03-07 13:05:36