我正在尝试将多个css文件合并为一个文件(来自我主机中的许多不同文件夹,包括外部css文件)。我使用以下简短的代码:
声明数组:
$styles=array(
array(
'name'=>'style1.css',
'path'=>'http://mydomain.com/css/'
),
array(
'name'=>'camera.css',
'path'=>'http://mydomain.com/js/camera/'
),
array(
'name'=>'style3.css',
'path'=>'http://external.com/assets/css/'
));获取内容并替换url:
foreach ($styles as $style) {
echo preg_replace('/url\(\s*[\'"]?\/?(.+?)[\'"]?\s*\)/i', 'url('.$style['path'].'$1)', file_get_contents($style['path'].$style['name']));
}合并成一个css文件后,我有一些css背景图像url,如下所示:
url(ttp://mydomain.com/css/../image/background.png) //Internal path - Case 1A
url(http://mydomain.com/js/camera/../../image/background.png) //Internal path - Case 1B
url(http://external.com/assets/css/../../image/background.png) //External path - Case 2实际上,内部路径(案例1A,1B)可以显示背景图像(尽管缺乏专业性),但外部路径(案例2)无法显示背景图像,我的问题是:如何将错误的路径替换为正确的路径(根据当前结果进行修复),如下:
url(http://mydomain.com/image/background.png) //Correct internal path
url(http://external.com/image/background.png) //Correct external path (我理解问题是,如果找到一个包含'../‘的关键字,将删除关键字并删除包含'*/’的关键字之前的1个字符串,但我不知道该怎么做)。提前谢谢。
(在提出新问题之前,我已经试着找出并试着搜索了1周)。
发布于 2013-12-03 03:59:18
另外,将/up-level-directory/../替换为/
这就是在全球范围内使用/的'/([^\/]+)/../'
$correct_url = preg_replace('|/\w+/\.\./|','/',$url);
https://stackoverflow.com/questions/20336576
复制相似问题