From c172c9e6d6ac049faca28c1ffbc41af3670afb59 Mon Sep 17 00:00:00 2001 From: Seth Falco Date: Sun, 10 Dec 2023 00:31:55 +0000 Subject: [PATCH] fix(cleanupIds): handle uri encoded references (#1880) --- plugins/cleanupIds.js | 7 ++++--- test/plugins/cleanupIds.25.svg | 21 +++++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) create mode 100644 test/plugins/cleanupIds.25.svg diff --git a/plugins/cleanupIds.js b/plugins/cleanupIds.js index 671a85248..f34acf148 100644 --- a/plugins/cleanupIds.js +++ b/plugins/cleanupIds.js @@ -215,10 +215,11 @@ exports.fn = (_root, params) => { } } for (const id of ids) { - let refs = referencesById.get(id); + const decodedId = decodeURI(id); + let refs = referencesById.get(decodedId); if (refs == null) { refs = []; - referencesById.set(id, refs); + referencesById.set(decodedId, refs); } refs.push({ element: node, name }); } @@ -261,7 +262,7 @@ exports.fn = (_root, params) => { if (value.includes('#')) { // replace id in href and url() element.attributes[name] = value.replace( - `#${id}`, + `#${encodeURI(id)}`, `#${currentIdString}` ); } else { diff --git a/test/plugins/cleanupIds.25.svg b/test/plugins/cleanupIds.25.svg new file mode 100644 index 000000000..db6784499 --- /dev/null +++ b/test/plugins/cleanupIds.25.svg @@ -0,0 +1,21 @@ +Should handle non-ASCII IDs and resolve URI encoded references. + +See: https://github.com/svg/svgo/issues/1696 + +=== + + + + + + + + +@@@ + + + + + + +