【问题标题】:How to store special characters (', ", &, etc) in mysql database, so they can be searchable?如何在 mysql 数据库中存储特殊字符('、"、& 等),以便它们可以被搜索?
【发布时间】:2009-05-01 21:01:05
【问题描述】:

我在存储引号、双引号和 & 号等特殊字符时遇到了一个小问题。我通过 mysql_real_escape_string() 放置每个 POST 请求,当我添加像 "That '70s Show" 这样的字符串时,它在 mysql DB 中存储为 "That '70s Show"。当我回显它时,它工作正常......但是当我尝试运行 % $string % 搜索 "That '70s Show" 时,它不会找到记录。我禁用了magic_quotes。

我怎样才能解决这个问题?

【问题讨论】:

  • 你在用 mysql_real_escape_string() 搜索你的 %$string% 吗?

标签: php mysql


【解决方案1】:

看起来问题在于您不仅运行通过mysql_real_escape_string() 存储在数据库中的传入数据,还运行htmlentities() 或亲戚。是这样吗?如果是这样,请退出。 :)

【讨论】:

  • +1:肯定会发生更多事情,因为 mysql_real_escape_string 会将 ' 更改为 '' 或 \' (我还没有检查过)。
  • 另一种可能性是编码不匹配,但我对简单的选项抱有希望。
  • 我不是。它只是 mysql_real_escape_string 就是这样。
  • 啊,我不敢相信我以前没有注意到这一点。这与从 IMDB 抓取数据的抓取脚本有关,该脚本对特殊字符进行编码并将它们作为编码字符串回显。有没有一个函数需要 '和 &并将它们解码回 ' 和 & ?
【解决方案2】:

引自 Mysql 参考文档

有几种方法可以在字符串中包含引号字符:

  • 用“'”引用的字符串中的“'”可以写成“''”。

  • 用“”引用的字符串中的“”可以写成“””。

  • 在引号字符前加上转义字符(“\”)。

  • 用“”引用的字符串中的“'”不需要特殊处理,需要 不能加倍或逃脱。同理,字符串中的“””被引用 带“'”不需要特殊处理。

以下 SELECT 语句演示了引用和转义的工作原理:

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';
+-------+---------+-----------+--------+--------+
| hello | "hello" | ""hello"" | hel'lo | 'hello |
+-------+---------+-----------+--------+--------+

参考:http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多