我如何从CSS替换url

时间:2013-12-02 19:48:13

标签: css replace

我正在尝试将多个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/'
));

获取内容并替换网址:

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(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周,然后再提出新问题)。

1 个答案:

答案 0 :(得分:0)

另外用/up-level-directory/../替换/ 全局为'/([^\/]+)/../' /

$ correct_url = preg_replace('| /\w+/\.\./ |','/',$ url);