Django-compressor: 圧縮後のsvgイメージURLのxml解析エラー

作成日 2018年05月26日  ·  2コメント  ·  ソース: django-compressor/django-compressor

django_compressorを使用してbootstrap.min.jsを圧縮しました

XML解析エラーのため、ナビゲーションバーの折りたたみアイコンが表示されません。
私はbootstrap4を使用していますが、bootstrap3でそのような問題に直面していません

Firefoxでinspect要素を使用して違いがわかりました

エラーなし(圧縮なし)

.navbar-dark .navbar-toggler-icon {
    background-image: url("data:image/svg+xml;charset=utf8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")
}

これによりXMLエラーが発生します(圧縮後)

.navbar-dark .navbar-toggler-icon {
    background-image: url("data:image/svg+xml;charset=utf8,%3CsvgviewBox='003030'xmlns='http://www.w3.org/2000/svg'%3E%3Cpathstroke='rgba(255,255,255,0.5)'stroke-width='2'stroke-linecap='round'stroke-miterlimit='10'd='M47h22M415h22M423h22'/%3E%3C/svg%3E")
}
bug

最も参考になるコメント

#828の変更にもかかわらず、これがまだ起こっていることを確認できます

Django 2.0、Python 3.6、django-compressor 2.2、Bootstrap4.1.1を使用しています

この問題はCSSMinFilterが原因で発生します

全てのコメント2件

#828の変更にもかかわらず、これがまだ起こっていることを確認できます

Django 2.0、Python 3.6、django-compressor 2.2、Bootstrap4.1.1を使用しています

この問題はCSSMinFilterが原因で発生します

csscompressorの回避策から借用して、 callbackパスを変更します)。 これにより、rcssminに渡す前にデータURLのスペースが「%20」に置き換えられ、rcssminがURLを操作できなくなります。

def compress(css, **kwargs):
    capture_svg = re.compile(r'url\("(data:image/svg.*?svg%3[Ee])\"\)')
    data_urls = re.findall(capture_svg, css)
    for data_url in data_urls:
        css = css.replace(data_url, data_url.replace(' ', '%20'))
    css = cssmin(css, **kwargs)
    return css


class CSSMinFilter(CallbackOutputFilter):
    callback = 'myapp.core.utils.compress'

この問題はrcssminにも報告されてい

参考までに、この問題は#878の重複のようです。

このページは役に立ちましたか?
0 / 5 - 0 評価