使用unicode的Codeigniter DB或URI问题

时间:2011-04-12 14:17:02

标签: mysql codeigniter unicode encoding uri

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

我有这段代码

$ topic包含来自URI / trends / about /海贼_的“海贼_(ONE_PIECE)”(ONE_PIECE) 我检查了回应$ 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编码存在问题,但我不确定如何修复它。

请帮帮我。 谢谢

1 个答案:

答案 0 :(得分:1)

我很确定你的问题是查询绑定会逃避你的输入值(我猜它不喜欢括号)。

尝试使用连接构建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);让汉字出来。