TagLib.class.php的一个Bug

浏览:217 发布日期:2010/09/09
- 普通 - 未处理
    public function parseCondition($condition) {
        $condition = str_ireplace(array_keys($this->comparison),array_values($this->comparison),$condition);
        $condition = preg_replace('/\$(\w+):(\w+)\s/is','$\\1->\\2 ',$condition);
        switch(strtolower(C('TMPL_VAR_IDENTIFY'))) {
            case 'array': // 识别为数组
                $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','$\\1["\\2"] ',$condition);
                break;
            case 'obj':  // 识别为对象
                $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','$\\1->\\2 ',$condition);
                break;
            default:  // 自动判断数组或对象 只支持二维
                $condition = preg_replace('/\$(\w+)\.(\w+)\s/is','(is_array($\\1)?$\\1["\\2"]:$\\1->\\2) ',$condition);
        }
        return $condition;
    }
造成的Bug是条件语句只匹配空格前面的语段,但是不匹配结束前面的语段,造成"$aa.bb eq $bb.aa"只解析成"$aa['bb'] == $bb.aa"。可以改成:    public function parseCondition($condition) {
        $condition = str_ireplace(array_keys($this->comparison),array_values($this->comparison),$condition);
        $condition = preg_replace('/\$(\w+):(\w+)\s/is','$\\1->\\2 ',$condition);
        if (strpos($condition,'.')){
            switch(strtolower(C('TMPL_VAR_IDENTIFY'))) {
                case 'array': // 识别为数组
                    $condition = preg_replace('/\$(\w+)\.(\w+)/is','$\\1["\\2"] ',$condition);
                    break;
                case 'obj':  // 识别为对象
                    $condition = preg_replace('/\$(\w+)\.(\w+)/is','$\\1->\\2 ',$condition);
                    break;
                default:  // 自动判断数组或对象 只支持二维
                    $condition = preg_replace('/\$(\w+)\.(\w+)/is','(is_array($\\1)?$\\1["\\2"]:$\\1->\\2) ',$condition);
            }
        }   
        
        return $condition;
    }
评论(
后面还有条评论,点击查看>>