Django-compressor: Error de análisis xml en la URL de la imagen svg después de la compresión

Creado en 26 may. 2018  ·  2Comentarios  ·  Fuente: django-compressor/django-compressor

He comprimido bootstrap.min.js usando django_compressor

el icono de contracción de la barra de navegación no se muestra debido a un error de análisis XML.
Estoy usando bootstrap4, no tuve ese problema con bootstrap3

vi la diferencia usando inspeccionar elemento en firefox

Sin error (sin compresión)

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

esto da error XML (después de la compresión)

.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

Comentario más útil

Puedo confirmar que esto todavía está sucediendo, a pesar de los cambios en el n. ° 828

Estoy usando Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1

El problema es causado por CSSMinFilter

Todos 2 comentarios

Puedo confirmar que esto todavía está sucediendo, a pesar de los cambios en el n. ° 828

Estoy usando Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1

El problema es causado por CSSMinFilter

Tomando prestado de una solución para csscompressor , agregué un filtro personalizado para ajustar rcssmin (reemplace CSSMinFilter en settings.COMPRESS_FILTERS con la cadena de ruta de puntos a este filtro y cambie la ruta callback ). Esto reemplazará los espacios en las URL de datos con "% 20" antes de pasar a rcssmin, lo que evita que rcssmin manipule las 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'

Este problema también se ha informado a rcssmin .

FYI, este problema parece ser un duplicado del # 878.

¿Fue útil esta página
0 / 5 - 0 calificaciones