Django-compressor: xml kesalahan penguraian di url gambar svg setelah kompresi

Dibuat pada 26 Mei 2018  ·  2Komentar  ·  Sumber: django-compressor/django-compressor

Saya telah mengompresi bootstrap.min.js menggunakan django_compressor

ikon runtuhnya bilah navigasi tidak ditampilkan karena kesalahan penguraian XML.
Saya menggunakan bootstrap4, saya tidak menghadapi masalah seperti itu dengan bootstrap3

saya melihat perbedaannya menggunakan elemen inspeksi di firefox

Tidak ada kesalahan (tanpa kompresi)

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

ini memberikan kesalahan XML (setelah kompresi)

.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

Komentar yang paling membantu

Saya dapat mengonfirmasi bahwa ini masih terjadi, meskipun ada perubahan pada # 828

Saya menggunakan Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1

Masalahnya disebabkan oleh CSSMinFilter

Semua 2 komentar

Saya dapat mengonfirmasi bahwa ini masih terjadi, meskipun ada perubahan pada # 828

Saya menggunakan Django 2.0, Python 3.6, django-compressor 2.2, Bootstrap 4.1.1

Masalahnya disebabkan oleh CSSMinFilter

Meminjam dari solusi untuk csscompressor , saya menambahkan filter khusus untuk membungkus rcssmin (ganti CSSMinFilter di settings.COMPRESS_FILTERS dengan string jalur bertitik ke filter ini dan ubah jalur callback ). Ini akan mengganti spasi di URL data dengan "% 20" sebelum diserahkan ke rcssmin yang mencegah rcssmin merusak 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'

Masalah ini juga telah dilaporkan ke rcssmin .

FYI, masalah ini tampaknya merupakan duplikat dari # 878.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat