首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在这种情况下,我如何避免单引号?

问在这种情况下,我如何避免单引号?
EN

Stack Overflow用户
提问于 2013-03-07 12:58:19
回答 2查看 510关注 0票数 4

我有一个页面,它对api进行jquery调用,以接收多个wikipedia urls。然后,我从url中提取文章名称(即从science等获取文章名称),向每个条目添加单引号('),将它们串在一起,最后将它们发送到一个php页面,该页面进行mysql select * from MyTable where title in('name1','name2','name3','name4')调用。当项目名称中已经有一个单引号时,就会出现问题(即(“希克定律”),因为它打破了where in单引号。下面是我使用的代码:

代码语言:javascript
复制
$.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。

因此,概括一下,这些步骤如下:

  1. 调用一个api并获得多个Wikipedia urls,
  2. 从每个网址获取文章名称,
  3. 将它们添加到urls1字符串中,同时用空格替换下划线
  4. 通过ajax将urls1字符串发送到pr.php页面。
  5. 在pr.php中,我执行以下操作:"SELECT * FROM MyTable WHERE title in".$_GET['s']

我试过做mysql_real_escape_string($_GET['s']),但那不管用。

我现在试着转义文章名称中的任何单引号,这样where in就不会中断,但它不起作用。我试着把上面的

代码语言:javascript
复制
var thisurl=(i==0) ? "'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'":",'"+item.url.substring(item.url.lastIndexOf('/') + 1).replace(/'/g, "\'")+"'";

但没起作用。有什么想法吗?

蒂娅!

EN

回答 2

Stack Overflow用户

发布于 2013-03-07 13:10:05

不应对客户端的SQL查询进行清理,而应在服务器端对SQL查询进行清理。

如果您的javascript代码生成了服务器接收的请求,则可以正确地转义这些请求,但是您无法控制(也永远不会)如何从客户端发送请求。

我可以在浏览器地址栏中显式地键入一个url,其中包含我认为合适的引号。

在php方面,可以使用mysql_escape_string:

代码语言:javascript
复制
<?
    $sanitized = array();
    foreach( $wikiPages as $page ){
        $sanitized[] = mysql_escape_string($page);
    }
    $values = "'".implode("','", $sanitized)."'";
票数 1
EN

Stack Overflow用户

发布于 2013-03-07 13:03:06

因为它的HTML内容,所以您应该能够用&quot;替换&quot;的实例。然后,它将在浏览器中正确显示,但当对需要执行相同替换的内容执行搜索时(例如,搜索术语"Hick's law“将成为WHERE子句语句中的”Hick‘s law“),您必须保持清醒。

PHP可能有一个用于转义HTML的内置程序,所以在自己处理之前,我建议您先查找它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15271874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档