我遇到了一个奇怪的问题。
我有这个代码
$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/