Django-compressor: Erreur d'analyse xml dans l'URL de l'image svg après compression

Créé le 26 mai 2018  ·  2Commentaires  ·  Source: django-compressor/django-compressor

J'ai compressé bootstrap.min.js en utilisant django_compressor

l'icône de réduction de la barre de navigation ne s'affiche pas en raison d'une erreur d'analyse XML.
J'utilise bootstrap4, je n'ai pas rencontré un tel problème avec bootstrap3

j'ai vu la différence en utilisant inspect element dans firefox

Aucune erreur (sans compression)

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

cela donne une erreur XML (après compression)

.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

Commentaire le plus utile

Je peux confirmer que cela se produit toujours, malgré les changements dans # 828

J'utilise Django 2.0, Python 3.6, django-compresseur 2.2, Bootstrap 4.1.1

Le problème est causé par CSSMinFilter

Tous les 2 commentaires

Je peux confirmer que cela se produit toujours, malgré les changements dans # 828

J'utilise Django 2.0, Python 3.6, django-compresseur 2.2, Bootstrap 4.1.1

Le problème est causé par CSSMinFilter

En empruntant à une solution de contournement pour csscompressor , j'ai ajouté un filtre personnalisé pour envelopper rcssmin (remplacez CSSMinFilter dans settings.COMPRESS_FILTERS par la chaîne de chemin en pointillé vers ce filtre et changez le chemin callback ). Cela remplacera les espaces dans les URL de données par «% 20» avant de passer à rcssmin, ce qui empêche rcssmin de modifier les 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'

Ce problème a également été signalé à rcssmin .

Pour info, ce problème semble être un double du numéro 878.

Cette page vous a été utile?
0 / 5 - 0 notes