87,922
社区成员
发帖
与我相关
我的任务
分享
function encode (str) {
return str.replace(/%[A-Z][0-9]|%[0-9][A-Z]|%[0-9]{2}|%[A-Z]{2}|[a-zA-Z0-9]/g, m => {
return m.length === 1 ? '00' + m.charCodeAt(0).toString(16) : m.replace('%', '')
})
}
function decode (str) {
return str.replace(/[A-Z][0-9]|[0-9][A-Z]|[1-9]{2}|00[0-9]{2}/g, m => {
return m.length === 2 ? '%' + m : String.fromCharCode(parseInt(m, 16))
})
}
const str = 'a12%D6%D012%25%C4%D013abcdefed'
const enStr = encode(str)
const deStr = decode(enStr)
console.log(str, enStr, deStr)
我只是按你说明。按我理解:加密时%+后面两个字符去除百分号原样输出,解密时要加回来
你看看是不是你想的的
然后:你为啥一直折腾这个呀?这有点奇葩。俺也一直不敢问……(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9a-f])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('a12%D6%D012%25%C4%D013abcdefed')
把正则稍微调整下即可,[0-9]修改成[0-9a-z]就支持字母了
(function(s){var c=s.match(/(%[0-9a-fA-F]{2}|[0-9])/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].substring(0,1)=='%'?c[i].substring(1,3):'00'+c[i].charCodeAt(0).toString('16')} console.log(c,r)})('%D6%D0%CE12%25%C4')
(function(s){var c=s.match(/(00[0-9]{2}|[a-fA-F0-9]{2})/gi),r='';for(var i=0;i<c.length;i++){r+=c[i].length==2?'%'+c[i]:String.fromCharCode(parseInt(c[i],16))}console.log(c,r)})('D6D0CE0031003225C4')