Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何对撇号进行编码,使其';可以在mysql中搜索吗?_Php_Mysql - Fatal编程技术网

Php 如何对撇号进行编码,使其';可以在mysql中搜索吗?

Php 如何对撇号进行编码,使其';可以在mysql中搜索吗?,php,mysql,Php,Mysql,我不认为这是一个最清楚的问题,但举个例子可以让它更清楚一些 我有一张满是电影名称的表格,其中一些包含撇号。我有一个用于查找电影的搜索框 如果我通过 mov_title = '$search_keywords' 这一切都是可行的,但这种方法不会为部分搜索产生任何结果,所以我不得不使用这种方法 mov_title LIKE '%$search_keywords%' 这种方法适用于A-Za-z0-9标题,但如果标题中有撇号,则无法找到电影,即使我进行了精确匹配 在将标题存储到数据库中之前,我将它们

我不认为这是一个最清楚的问题,但举个例子可以让它更清楚一些

我有一张满是电影名称的表格,其中一些包含撇号。我有一个用于查找电影的搜索框

如果我通过

mov_title = '$search_keywords'
这一切都是可行的,但这种方法不会为部分搜索产生任何结果,所以我不得不使用这种方法

mov_title LIKE '%$search_keywords%'
这种方法适用于A-Za-z0-9标题,但如果标题中有撇号,则无法找到电影,即使我进行了精确匹配

在将标题存储到数据库中之前,我将它们放在以下位置:

$search_keywords = htmlspecialchars(mysql_escape_string($_GET["search_keywords"]));
所以在DB中,每个撇号前都有一个正斜杠

将电影标题与撇号匹配的唯一方法是在搜索框中的撇号前面加上正斜杠


这看起来很琐碎,我确信解决方案显而易见,但我就是看不到。

使用
mysql\u real\u escape\u string()
,不要使用
htmlspecialchars()
。后者不是用于数据库转义,而是用于HTML生产。

这只是因为在进行输出之前转义了HTML输出的数据!您只应在输出前正确执行,即:

<li><?php echo htmlspecialchars($some_var); ?></li>
  • 取消数据库中的值,并将应用程序更改为仅在输出时转义。目前除了在$search\u字符串上执行
    htmlspecialchars(mysql\u real\u escape\u string())
    之外,没有其他方法


    即使在插入数据库时对HTML进行转义是有意义的,
    mysql\u real\u escape\u string()
    将是外部函数,而不是内部函数。

    如果您希望保持数据库完整,您可以运行htmlspecialchars()在构造查询之前,对正在查找的任何搜索词执行函数。虽然我建议按原样将数据放入数据库(但使用mysql\u real\u escape\u string()对其进行转义以阻止sql注入尝试)。然后在将数据打印到浏览器时使用htmlspecialchars()。

    删除htmlspecialchars()不会改变任何内容。行为完全相同。因为数据库中的值已使用htmlspecialchars()。您需要取消所有这些值。例如,使用HTMLIN TytYyDeCuffE()和TrasLaseSe()。我修复了一些测试值,但IM仍然无法找到它们。在使用它之前,您可以给出几个数据库行并对查询进行回响吗?还可以考虑使用AddiSLaseSe()。