我有一个页面,它对 api 进行 jquery 调用以接收多个维基百科 url。然后我从 url 中提取文章名称(即science
从http://en.wikipedia.org/science
等中获取),为每个添加单引号 ('),将它们串在一起,最后将它们发送到一个 php 页面,该页面进行 mysqlselect * from MyTable where title in('name1','name2','name3','name4')
调用。当文章名称中已经有一个单引号(即“希克定律”)时,就会出现问题,因为它破坏了where in
单引号。这是我正在使用的代码:
$.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 调用并获取多个 Wikipedia url,
- 从每个 url 获取文章名称,
- 将它们添加到
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, "\'")+"'";
但它没有用。有任何想法吗?
蒂亚!