diff --git a/src/core/const.js b/src/core/const.js index 63ffdeb..95e55a5 100644 --- a/src/core/const.js +++ b/src/core/const.js @@ -227,7 +227,7 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; /** * Regexp for SVG size. diff --git a/src/core/const.js b/src/core/const.js index 63ffdeb..95e55a5 100644 --- a/src/core/const.js +++ b/src/core/const.js @@ -227,7 +227,7 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; /** * Regexp for SVG size. diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 2d70db2..f656d6d 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -186,8 +186,9 @@ return { mediaType: dataUriMatch[1] ? dataUriMatch[1].toLowerCase() : undefined, subType: dataUriMatch[2] ? dataUriMatch[2].toLowerCase() : undefined, - encoding: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, - data: dataUriMatch[4], + charset: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, + encoding: dataUriMatch[4] ? dataUriMatch[4].toLowerCase() : undefined, + data: dataUriMatch[5], }; } diff --git a/src/core/const.js b/src/core/const.js index 63ffdeb..95e55a5 100644 --- a/src/core/const.js +++ b/src/core/const.js @@ -227,7 +227,7 @@ * @type {RegExp|string} * @example data:image/png;base64 */ -export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;(charset=[\w-]+|base64))?,(.*)/i; +export const DATA_URI = /^\s*data:(?:([\w-]+)\/([\w+.-]+))?(?:;charset=([\w-]+))?(?:;(base64))?,(.*)/i; /** * Regexp for SVG size. diff --git a/src/core/utils/index.js b/src/core/utils/index.js index 2d70db2..f656d6d 100644 --- a/src/core/utils/index.js +++ b/src/core/utils/index.js @@ -186,8 +186,9 @@ return { mediaType: dataUriMatch[1] ? dataUriMatch[1].toLowerCase() : undefined, subType: dataUriMatch[2] ? dataUriMatch[2].toLowerCase() : undefined, - encoding: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, - data: dataUriMatch[4], + charset: dataUriMatch[3] ? dataUriMatch[3].toLowerCase() : undefined, + encoding: dataUriMatch[4] ? dataUriMatch[4].toLowerCase() : undefined, + data: dataUriMatch[5], }; } diff --git a/test/core/util.js b/test/core/util.js index 9813d9a..41962ee 100755 --- a/test/core/util.js +++ b/test/core/util.js @@ -84,12 +84,50 @@ .to.equal('image'); expect(dataUri.subType) .to.equal('png'); + expect(dataUri.charset) + .to.be.an('undefined'); expect(dataUri.encoding) .to.equal('base64'); expect(dataUri.data) .to.equal('94Z9RWUN77ZW'); }); + it('should decompose a data URI with charset', function () + { + const dataUri = PIXI.utils.decomposeDataUri('data:image/svg+xml;charset=utf8;base64,PGRpdiB4bWxucz0Pg=='); + + expect(dataUri) + .to.be.an('object'); + expect(dataUri.mediaType) + .to.equal('image'); + expect(dataUri.subType) + .to.equal('svg+xml'); + expect(dataUri.charset) + .to.equal('utf8'); + expect(dataUri.encoding) + .to.equal('base64'); + expect(dataUri.data) + .to.equal('PGRpdiB4bWxucz0Pg=='); + }); + + it('should decompose a data URI with charset without encoding', function () + { + const dataUri = PIXI.utils.decomposeDataUri('data:image/svg+xml;charset=utf8,PGRpdiB4bWxucz0Pg=='); + + expect(dataUri) + .to.be.an('object'); + expect(dataUri.mediaType) + .to.equal('image'); + expect(dataUri.subType) + .to.equal('svg+xml'); + expect(dataUri.charset) + .to.equal('utf8'); + expect(dataUri.encoding) + .to.be.an('undefined'); + expect(dataUri.data) + .to.equal('PGRpdiB4bWxucz0Pg=='); + }); + it('should return undefined for anything else', function () { const dataUri = PIXI.utils.decomposeDataUri('foo');