修复urldecode异常

This commit is contained in:
yi-ge 2019-03-24 00:15:54 +08:00
parent 58e36e8c17
commit e3e47542fe
2 changed files with 48 additions and 6 deletions

View File

@ -97,7 +97,7 @@ module.exports = {
/* /*
** You can extend webpack config here ** You can extend webpack config here
*/ */
extend (config, ctx) { extend(config, ctx) {
// Run ESLint on save // Run ESLint on save
if (ctx.isDev && ctx.isClient) { if (ctx.isDev && ctx.isClient) {
config.module.rules.push({ config.module.rules.push({

View File

@ -137,16 +137,58 @@ export default {
methods: { methods: {
decodeTitle(name) { decodeTitle(name) {
try { try {
// return decodeURIComponent(name.replace(/[%]/g, function (m) { return this.urldecode(name)
// return '%' + m.charCodeAt(0).toString(16)
// // Basically changes "%" to "%25".
// }))
return decodeURI(escape(name))
} catch (err) { } catch (err) {
console.log(err) console.log(err)
return name return name
} }
}, },
urldecode(encodedString) {
let output = encodedString
let binVal, thisString
const myregexp = /(%[^%]{2})/
function utf8to16(str) {
let c
let char2, char3
let out = ''
const len = str.length
let i = 0
while (i < len) {
c = str.charCodeAt(i++)
switch (c >> 4) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
out += str.charAt(i - 1)
break
case 12: case 13:
char2 = str.charCodeAt(i++)
out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F))
break
case 14:
char2 = str.charCodeAt(i++)
char3 = str.charCodeAt(i++)
out += String.fromCharCode(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0))
break
}
}
return out
}
let match = null
while ((match = myregexp.exec(output)) != null &&
match.length > 1 &&
match[1] !== '') {
binVal = parseInt(match[1].substr(1), 16)
thisString = String.fromCharCode(binVal)
output = output.replace(match[1], thisString)
}
output = output.replace(/\\+/g, ' ')
output = utf8to16(output)
return output
},
articelRightTocClick() { articelRightTocClick() {
const windowWidth = window.innerWidth || document.documentElement.clientWidth const windowWidth = window.innerWidth || document.documentElement.clientWidth
if (windowWidth < 768) { if (windowWidth < 768) {