Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Codeigniter url中断codigniter查询中传递的括号_Codeigniter_Url_Activerecord_Urlencode - Fatal编程技术网

Codeigniter url中断codigniter查询中传递的括号

Codeigniter url中断codigniter查询中传递的括号,codeigniter,url,activerecord,urlencode,Codeigniter,Url,Activerecord,Urlencode,我有一个字符串通过URL传递到Codeigniter驱动的站点。该字符串在传递之前经过URL编码,然后在传递给模型中搜索数据库表中字符串的函数之前由控制器进行URL解码。我读过其他几篇关于这个问题的文章,但没有一篇能为我提供一个可行的解决方案。以下是我读到的一些东西: 下面是正在发生的事情: url编码的字符串通过url传递,如下所示: http://www.awebsite.com/controllername/functionname/test%28string%29 控制器按如下方式处理此

我有一个字符串通过URL传递到Codeigniter驱动的站点。该字符串在传递之前经过URL编码,然后在传递给模型中搜索数据库表中字符串的函数之前由控制器进行URL解码。我读过其他几篇关于这个问题的文章,但没有一篇能为我提供一个可行的解决方案。以下是我读到的一些东西:

下面是正在发生的事情:

url编码的字符串通过url传递,如下所示:

http://www.awebsite.com/controllername/functionname/test%28string%29

控制器按如下方式处理此问题:

public function functionname($string) {
    $this->load->model("codeigniter_model");
    $dstring = urldecode($string);
    $validString = $this->codeigniter_model->valid_string($dstring);        
    if (!$validString) { 
        $thiserror =  "<br>Error: Invalid String. (".$dstring.")"; 
        echo $thiserror; 
        exit;
    }
}
回显查询是正确的:从dbtable中选择id,其中dbfield='teststring',在Navicat中运行时返回正确的id。但是-Codeigniter在查询中返回FALSE

我还检查了得到回显的查询中的字符串是否不包含HTML实体

我无法控制正在传递的字符串,并且确实需要Codeigniter接受和作为字符串的一部分

有什么想法吗

编辑:当相同的字符串通过post从表单传递到Codeigniter控制器时,它工作正常

编辑2:刚刚尝试使用此处建议的活动记录方法创建查询:无法添加其他链接,因此:Ellisab.com forums viewthread 162036

这:

也不行

编辑3:感谢Kyslik建议使用分析器。字符串显然毕竟是html编码的:从用户那里选择id,其中string='test&40;字符串&41;'当然,由于HTML实体的原因,它将返回false

不幸的是,添加代码以同时使用常规查询和活动记录查询删除这些实体:

$sql=从dbtable中选择id,其中dbfield=?; $query=$this->db->query$sql,arrayhtmlspecialchars\u decode$string

$this->db->select'id'; $this->db->where'dbfield','htmlspecialchars\u decode$string',FALSE; $query=$this->db->get'dbtable'


仍然不起作用。

答案是htmlspecialchars\u解码不会解码和的实体。如果我在传递字符串之前和url解码之后将此代码添加到控制器:

$dstring=str_replace&40$dstring; $dstring=str_replace&41$dstring


然后一切正常。

请打开$this->output->enable_profilerTRUE;并查看正在发送到数据库服务器的查询。@Kyslik+1表示建议启用探查器。这导致了实际的解决方案。
function valid_string($string)
    {
    $sql = "select id from dbtable where dbfield = ?"; 
    $query = $this->db->query($sql, array($string));
    //Added this in to see what the query actually end up being
    echo $this->db->last_query();
        if ($query->num_rows() > 0) :
            return TRUE;
        else:
            return FALSE;       
        endif;
}
$this->db->select('id');
$this->db->where('dbfield', "'".$string."'", FALSE);
$query = $this->db->get('dbfield');