我有一个页面,它对api进行jquery调用,以接收多个wikipedia urls。然后,我从url中提取文章名称(即从science等获取文章名称),向每个条目添加单引号('),将它们串在一起,最后将它们发送到一个php页面,该页面进行mysql select * 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。
因此,概括一下,这些步骤如下:
urls1字符串中,同时用空格替换下划线urls1字符串发送到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, "\'")+"'";但没起作用。有什么想法吗?
蒂娅!
发布于 2013-03-07 13:10:05
不应对客户端的SQL查询进行清理,而应在服务器端对SQL查询进行清理。
如果您的javascript代码生成了服务器接收的请求,则可以正确地转义这些请求,但是您无法控制(也永远不会)如何从客户端发送请求。
我可以在浏览器地址栏中显式地键入一个url,其中包含我认为合适的引号。
在php方面,可以使用mysql_escape_string:
<?
$sanitized = array();
foreach( $wikiPages as $page ){
$sanitized[] = mysql_escape_string($page);
}
$values = "'".implode("','", $sanitized)."'";发布于 2013-03-07 13:03:06
因为它的HTML内容,所以您应该能够用"替换"的实例。然后,它将在浏览器中正确显示,但当对需要执行相同替换的内容执行搜索时(例如,搜索术语"Hick's law“将成为WHERE子句语句中的”Hick‘s law“),您必须保持清醒。
PHP可能有一个用于转义HTML的内置程序,所以在自己处理之前,我建议您先查找它。
https://stackoverflow.com/questions/15271874
复制相似问题