dousui6488 2015-02-16 03:01 采纳率: 100%
浏览 34

PHP CSS解析器无法解析属性值中的分号

I'm using this function to parse the CSS files, but when it comes to property values containing semicolon, it breaks. Example:

#logo {
    background-image: url("data:image/png;base64,..................");
}

I changed the explode delimiter to " " but it didn't produce expected results. Please help.

Function:

function parse($file){
    $css = file_get_contents($file);
    preg_match_all( '/(?ims)([a-z0-9\s\.\:#_\-@,]+)\{([^\}]*)\}/', $css, $arr);
    $result = array();
    foreach ($arr[0] as $i => $x){
        $selector = trim($arr[1][$i]);
        $rules = explode(';', trim($arr[2][$i]));
        $rules_arr = array();
        foreach ($rules as $strRule){
            if (!empty($strRule)){
                $rule = explode(":", $strRule);
                $rules_arr[trim($rule[0])] = trim($rule[1]);
            }
        }

        $selectors = explode(',', trim($selector));
        foreach ($selectors as $strSel){
            $result[$strSel] = $rules_arr;
        }
    }
    return $result;
}

Execution:

$css = parse('content/custom.css');
echo print_r($css);
  • 写回答

1条回答 默认 最新

  • dongshijiao6890 2015-02-16 03:46
    关注

    What about using a temporary place holder string for the offsensive ;base64, then do the split, then restore it back, something like:

    Replace this line:

     $rules = explode(';', trim($arr[2][$i]));
    

    with this:

    //replace ;base64 with a placeholder
    $placeholder=uniqid();
    $arr[2][$i] = str_replace(";base64",$placeholder,$arr[2][$i]);
    //explode
    $rules = explode(';', trim($arr[2][$i]));
    //restore from placeholder
    $rules = array_map(function ($el) {
        return str_replace($placeholder, ";base64", $el);
    }, $rules);
    
    评论

报告相同问题?

悬赏问题

  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?
  • ¥15 乘性高斯噪声在深度学习网络中的应用
  • ¥15 运筹学排序问题中的在线排序
  • ¥15 关于docker部署flink集成hadoop的yarn,请教个问题 flink启动yarn-session.sh连不上hadoop,这个整了好几天一直不行,求帮忙看一下怎么解决
  • ¥30 求一段fortran代码用IVF编译运行的结果
  • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
  • ¥15 C++ 头文件/宏冲突问题解决
  • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
  • ¥50 安卓adb backup备份子用户应用数据失败
  • ¥20 有人能用聚类分析帮我分析一下文本内容嘛