【问题标题】:PHP/Mysql select and special charactersPHP/Mysql 选择和特殊字符
【发布时间】:2014-03-19 08:59:35
【问题描述】:

我有一个简单的 mysql 查询:

$query = addslashes($_REQUEST['query']);
$sql = mysql_query ("SELECT * FROM countries WHERE name LIKE '%{$query}%'");

它适用于任何 $query,除非其中包含特殊字符。

假设我正在寻找“奥兰群岛”或“科特迪瓦”,它不会检索任何内容。

我也试过不加斜杠,但它并没有改变任何东西。

感谢您的帮助。

编辑

这是我在 Mysql 中设置的变量:

character_set_client     | utf8    
character_set_connection | utf8                       
character_set_database   | utf8                    
character_set_filesystem | binary                    
character_set_results    | utf8                      
character_set_server     | latin1                    
character_set_system     | utf8   

字符集服务器是我无法更改的。它似乎是由我的托管设置的。 任何改变这一点的尝试都会给我一条消息,告诉我我没有允许我这样做的超级权限。

【问题讨论】:

  • 试试这个:-stackoverflow.com/questions/18455406/…stackoverflow.com/questions/10578694/… 在搜索时替换这些字符
  • 请检查输入字符串和数据库编码是否相同(显然我建议使用utf-8)
  • @Lorenzo Marcon:我编辑了我的问题。这可能会给你一些额外的信息。
  • @A5I-IE5:我绑了,但没有帮助
  • 您必须继续执行步骤,以确定问题所在。尝试在脚本中硬编码查询,例如$sql = mysql_query ("SELECT * FROM countries WHERE name LIKE '%Åland Islands%'")。它提供结果吗?

标签: mysql select special-characters


【解决方案1】:

在 mysql_query 之后使用以下内容:

header('Content-type: text/html; charset=utf-8');

【讨论】:

    【解决方案2】:

    我得到了答案,但问题不是我认为的问题......

    这不是关于 mysql 本身,而是关于我用来输出 MySQL 结果的 json_encode。

    所以,我必须对输入数据进行 utF8 解码...

    $query = utf8_decode($_REQUEST['query']);
    

    然后我进行 Mysql 查询,最后输出结果如下:

    $response = array_map("utf8_encode", $response); 
    
    echo json_encode ($response);
    

    【讨论】:

    • 很奇怪。但很高兴你发现了:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-04
    • 2013-03-26
    • 2018-04-18
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    相关资源
    最近更新 更多