From 96786a984e1094b4337437a2b85043c795024d42 Mon Sep 17 00:00:00 2001 From: fxy060608 Date: Mon, 10 Jun 2019 14:20:20 +0800 Subject: [PATCH] fix(h5): improve url query #445 #446 --- src/core/helpers/protocol/route.js | 38 ++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/src/core/helpers/protocol/route.js b/src/core/helpers/protocol/route.js index 230793297..312a325ec 100644 --- a/src/core/helpers/protocol/route.js +++ b/src/core/helpers/protocol/route.js @@ -1,22 +1,36 @@ import getRealRoute from '../get-real-route' function encodeQueryString (url) { - if (typeof url === 'string') { - const urls = url.split('?') + if (typeof url !== 'string') { + return url + } + const index = url.indexOf('?') - url = urls[0] + if (index === -1) { + return url + } - const params = []; - (urls[1] || '').split('&').forEach(function (pair) { - if (pair) { - const pairs = pair.split('=') - params.push(pairs[0] + '=' + encodeURIComponent(pairs[1])) - } - }) + const query = url.substr(index + 1).trim().replace(/^(\?|#|&)/, '') - return params.length ? url + '?' + params.join('&') : url + if (!query) { + return url } - return url + + url = url.substr(0, index) + + const params = [] + + query.split('&').forEach(param => { + const parts = param.replace(/\+/g, ' ').split('=') + const key = parts.shift() + const val = parts.length > 0 + ? parts.join('=') + : '' + + params.push(key + '=' + encodeURIComponent(val)) + }) + + return params.length ? url + '?' + params.join('&') : url } function createValidator (type) { -- GitLab