Mysql unicode中的Codeigniter DB或URI问题

Mysql unicode中的Codeigniter DB或URI问题,mysql,codeigniter,unicode,encoding,uri,Mysql,Codeigniter,Unicode,Encoding,Uri,我有个奇怪的问题 我有这个密码 $topic包含“海賊_(一篇)“来自URI/trends/about/海賊_(一件) 我检查了echo$topic,它打印出来了海賊_(一件) 问题是,此代码将$row返回为空数组 Array ( [0] => Array ( [redirect_title] => ) ) 但是,如果我使用这段代码(将?替换为$topic的实际值),它将非常有效 $sql="SELECT wt

我有个奇怪的问题

我有这个密码

$topic包含“海賊_(一篇)“来自URI/trends/about/海賊_(一件) 我检查了echo$topic,它打印出来了海賊_(一件)

问题是,此代码将$row返回为空数组

Array
(
    [0] => Array
        (
            [redirect_title] =>  
        )

)
但是,如果我使用这段代码(将?替换为$topic的实际值),它将非常有效

 $sql="SELECT wti.redirect_title FROM wikipedia_timelines AS wti WHERE wti.redirect_title = '海賊_(ONE_PIECE)' LIMIT 1";
 $query = $this->db->query($sql,array($topic));
 if ($row = $query->result_array()) 
 {
用{$topic}替换?也不会使它工作

只有当$topic包含()时才会出现此问题,如果它没有()则可以正常工作

我想知道是什么问题。 我想URI编码有问题,但我不确定如何解决

请帮帮我。
谢谢

我很确定您的问题是查询绑定会转义您的输入值(我猜它不喜欢括号)

尝试使用串联构建sql字符串,如:

$sql = "SELECT wti.redirect_title FROM wikipedia_timelines AS wti WHERE wti.redirect_title = '".$topic."' LIMIT 1";
$query = $this->db->query($sql);
看看这是否有帮助。或者试试active record类,我一直用它来处理日文字符,看起来效果不错

//编辑:


要在URI中使用括号,请尝试更改
application/config.config.php
并设置

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-()';

还可以尝试
urldecode($topic);
将汉字提取出来。

返回空数组后,
$this->db->last_query()的输出是什么?它实际上返回正确的sql查询。它在MySQL命令行上不起作用,但在MySQL客户端应用程序(sequelpro)中实际起作用像mysqlmyadmintry和change
application/config.config.php
和set
$config['allowed_uri_chars']='a-z 0-9~%。:\-();
也可以尝试
urldecode($topic);
$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-()';