2

Webサイトをダウンロードして、特定のドメイン内のすべてのリンクを相対リンクに変換しようとすると、かなり特殊なケースが発生します。私が使用するwgetコマンドは次のとおりです。

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

必要なすべてのページとリソースを問題なくダウンロードします。次に、ソースページ内のすべてのリンクを相対パスで変換します。このプロセス中に、Webサイトがダウンロードフォルダからスムーズに動作するように、パスエンコーディングも実行します。

私が直面している問題は次のとおりです。

元の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 \{\} \;

:)。URL に最大 X 個のスペースを含めることができる場合は、これを X 回繰り返します。

于 2012-11-09T00:27:41.733 に答える
0

これは古い質問であることは知っていますが、同じ問題を検索しているときに見つけました。

別の解決策を提案します: URL を引用符で囲みます:

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

トリックを行う必要があります。

于 2014-10-29T14:55:58.960 に答える