From c5aef5cf3742295d17ac056625a6bbcb5a669e20 Mon Sep 17 00:00:00 2001 From: Stephen Cameron Date: Tue, 8 Oct 2019 15:35:35 +0200 Subject: [PATCH] Avoid square brackets in URL and make querystring shorter. Only accept valid filter IDs now. Fix #3073 @1 --- resources/js/components/ProductsFilters.vue | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/resources/js/components/ProductsFilters.vue b/resources/js/components/ProductsFilters.vue index 2097cd5..e712303 100644 --- a/resources/js/components/ProductsFilters.vue +++ b/resources/js/components/ProductsFilters.vue @@ -173,7 +173,12 @@ handler(oldFilters, newFilters) { if (this.filterQuerystring !== '') { - history.replaceState(newFilters, '', '?' + this.filterQuerystring); + + // Using square brackets in the URL can cause problems due to URL encoding and decoding + // so it's better to remove them while also shortening the URL to simply use Fx=... + const safeQuerystring = this.filterQuerystring.replace(/filter\[(\d+)]/g, 'F$1'); + + history.replaceState(newFilters, '', '?' + safeQuerystring); } } } @@ -276,8 +281,10 @@ // Values may be a number or a string ('-') so don't try to convert them to integers value = value.split(';'); - // Update the actual filter data - $this.filters[key] = value; + // Update the actual filter data if the key exists + if ($this.filters.hasOwnProperty(key)) { + $this.filters[key] = value; + } }); $this.updateFilters(); -- 2.39.5