diff --git a/nuxt.config.js b/nuxt.config.js index 6dbf9b1..e79a1da 100644 --- a/nuxt.config.js +++ b/nuxt.config.js @@ -97,7 +97,7 @@ module.exports = { /* ** You can extend webpack config here */ - extend (config, ctx) { + extend(config, ctx) { // Run ESLint on save if (ctx.isDev && ctx.isClient) { config.module.rules.push({ diff --git a/pages/post/_id.vue b/pages/post/_id.vue index a74e1f8..8309fe9 100644 --- a/pages/post/_id.vue +++ b/pages/post/_id.vue @@ -137,16 +137,58 @@ export default { methods: { decodeTitle(name) { try { - // return decodeURIComponent(name.replace(/[%]/g, function (m) { - // return '%' + m.charCodeAt(0).toString(16) - // // Basically changes "%" to "%25". - // })) - return decodeURI(escape(name)) + return this.urldecode(name) } catch (err) { console.log(err) 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() { const windowWidth = window.innerWidth || document.documentElement.clientWidth if (windowWidth < 768) {