2

当我尝试下载网站并尝试将某个域内的所有链接转换为相对链接时,我遇到了一个相当特殊的情况。我使用的 wget 命令是:

wget -q -r -nH -H -D{domain-name} -l 5 -p -E -k -e robots=off {url}

它可以很好地下载所有必需的页面和资源。然后它继续使用相对路径转换源页面中的所有链接。在此过程中,它甚至会执行一些路径编码,以便网站从下载文件夹顺利运行。

我面临的问题是:

假设我有一个指向原始 index.html 中的样式表的链接,如下所示 -

<link rel="stylesheet" href="/templates/source/booga booga/foobar.css" type="text/css" />

wget 从服务器下载正确的 css 并将链接编码到 index.html 中的 css 文件,如下所示 -

<link rel="stylesheet" href="/templates/source/booga&#32;booga/foobar.css" type="text/css" />

到目前为止一切都很好。所有浏览器都可以很好地找到样式表。

现在,样式表 foobar.css 包含这样的部分 -

.foo-bar-button {
font-size: 12px;
padding: 10px 20px 10px 30px;
background: url(/templates/professional/1/main/en/gfx/booga%20booga/foo-bar.png) left 55%  no-repeat;
display: block;
width: 90px;
}

wget 下载背景图像,并继续对其路径进行转换和/或编码。就这样结束了——

.foo-bar-button {
font-size: 12px;
padding: 10px 20px 10px 30px;
background: url(/templates/professional/1/main/en/gfx/booga booga/foo-bar.png) left 55%  no-repeat;
display: block;
width: 90px;
}

下载/转换后的 css 文件中背景图像的路径现在有一个未编码的空格。IE 可以很好地找到图像并且该站点可以正常工作。Chrome/Firefox/Opera 无法处理,按钮不可见。

我有多种情况,样式表中 url() 中的空格会导致样式不正确。

任何帮助,将不胜感激。

4

2 回答 2

0
find -name *.css -exec sed -e 's/\(url([^)]*\) /\1%20/g' -i \{\} \;

:). If urls can contain up to X spaces, then repeat this X times.

于 2012-11-09T00:27:41.733 回答
0

我知道这是一个老问题,但我在寻找同样的问题时发现了它。

我提出了另一种解决方案:将网址放在引号之间:

`sed -re "s/url\((.+)\)(.+)/url\(\'\1\'\)\2/g" file.css -i;`

应该做的伎俩。

于 2014-10-29T14:55:58.960 回答