2

我正在开发一个应用程序,在该应用程序中通过多个不同的条件搜索用户。可用条件之一是按名称搜索。名称存储在数据库中,去除了 HTML 字符,例如。a ' 存储为'. 这样做的问题是,如果用户通过输入常规英文名称的名称进行搜索,它会在数据库中查找英文名称而不是 HTML 剥离的名称。我曾尝试使用 htmlspecialchars ($string, ENT_QUOTES),但由于某种原因,它并不总是正确地替换单引号。谁能想到为什么会发生这种情况,或推荐更好的方法?谢谢!

4

4 回答 4

3

您不需要替换单引号。您需要做的就是使用其中一个PDOMySQLi扩展名。PDO 示例,

$stmt = $pdo->prepare('SELECT * FROM tableName WHERE name = :name');

$stmt->execute(array(':name' => $name));
foreach ($stmt as $row) 
{
    // do something with $row
}

这样,即使值有单引号,它也允许您进行搜索。

于 2012-09-21T16:40:37.400 回答
1

尝试使用它html_entity_decode($string)而不是htmlspecialchars($string, ENT_QUOTES);

于 2012-09-21T16:40:12.083 回答
0

两个都很好,但你也可以试试这个......

 function change_text($in, $out, $text){

$input = array($in);
$change = array($out) ;
$result = @str_replace ($input ,$change, $text);
return $result;
}

$change_text = change_text("'", '',$text);

希望它会有所帮助

于 2012-09-21T16:45:44.407 回答
0

在您的查询中,将您的 '(引号)替换为 ''。第一个引用将在此引用之后的字符上签名,将按原样使用。

下面的示例代码:

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
+----+----------+---------+
1 row in set (0.00 sec)

mysql> update activities set activity='aku''kamu' where id=2
Query OK, 1 row affected (0.06 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from activities where activity='aku''kamu';
+----+----------+---------+
| id | activity | user_id |
+----+----------+---------+
|  1 | aku'kamu |       3 |
|  2 | aku'kamu |       3 |
+----+----------+---------+
2 rows in set (0.00 sec)

mysql>
于 2012-09-21T16:52:04.660 回答