Django-compressor: 压缩后,svg图片网址中出现xml解析错误

创建于 2018-05-26  ·  2评论  ·  资料来源: django-compressor/django-compressor

我使用django_compressor压缩了bootstrap.min.js

由于XML解析错误,导航栏折叠图标未呈现。
我正在使用bootstrap4,bootstrap3没有遇到这样的问题

我在Firefox中使用检查元素看到了区别

无错误(无压缩)

.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")
}

最有用的评论

我可以确认,尽管#828有所更改,但这种情况仍在发生

我正在使用Django 2.0,Python 3.6,django-compressor 2.2,Bootstrap 4.1.1

问题是由CSSMinFilter

所有2条评论

我可以确认,尽管#828有所更改,但这种情况仍在发生

我正在使用Django 2.0,Python 3.6,django-compressor 2.2,Bootstrap 4.1.1

问题是由CSSMinFilter

从一种解决方法借用csscompressor ,我添加了一个自定义过滤器来包装rcssmin(与虚线路径字符串,此过滤器更换settings.COMPRESS_FILTERS和CSSMinFilter改变callback路径)。 这将在移交给rcssmin之前用“%20”替换数据URL中的空格,以防止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 等级

相关问题

alper picture alper  ·  24评论

polmuz picture polmuz  ·  20评论

ghost picture ghost  ·  20评论

camilonova picture camilonova  ·  7评论

markstahler picture markstahler  ·  17评论