mysql - Codeigniter DB 或 URI 与 unicode 的问题

标签 mysql codeigniter unicode encoding uri

我遇到了一个奇怪的问题。

我有这个代码

$topic 包含来自 URI/trends/about/海贼_(ONE_PIECE) 的“海贼_(ONE_PIECE)” 我检查了 echo $topic 并打印出了海贼_(ONE_PIECE)

$sql="SELECT wti.redirect_title FROM wikipedia_timelines AS wti WHERE wti.redirect_title = ? LIMIT 1";
$query = $this->db->query($sql,array($topic));
if ($row = $query->result_array()) 
{

问题是这段代码返回的 $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 编码有问题,但我不知道如何修复它。

请帮助我。 谢谢

最佳答案

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

尝试使用连接构建 sql 字符串,例如:

$sql = "SELECT wti.redirect_title FROM wikipedia_timelines AS wti WHERE wti.redirect_title = '".$topic."' LIMIT 1";
$query = $this->db->query($sql);

看看是否有帮助。或者尝试使用事件记录类,我一直用它来处理日语字符,它似乎工作正常。

//编辑:

要允许 URI 中包含括号,请尝试更改 application/config.config.php 并设置

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

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

关于mysql - Codeigniter DB 或 URI 与 unicode 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636688/

相关文章:

mysql - mysql查询问题中不同用户的两个日期之间的总和记录

php - Codeigniter 不执行删除查询

python - 如何从 Python 的字典中删除 u' (unicode)?

C# 转换 Unicode 字符

php - Laravel 中 3 个表的复杂 INNER JOIN Mysql 查询

php - 如何在android中使用MySql服务器(在桌面上下载)?

mysql - 在 JMETER 中将汇总报告结果添加到数据库

codeigniter - 自适应支付申请批准 - 平均时间尺度?

php - 如何防止两个用户获得相同的唯一 key ?

javascript - Django、Javascript、JSON 和 Unicode