是否可以使用JavaScript / jQuery进行36编码?

我正在考虑在这里使用编码/解码技术(编码到基础36 /从基础36解码在Ruby中很简单)

如何在twitter中实现像url一样的简短url?

想要跟踪用户推荐,邀请URL。 我可以使用Rails进行解码,但有没有办法用Javascript或jQuery进行编码?

Number上的toString方法有一个可选的基数参数:

 (128482).toString(36); 128482..toString(36); 128482 .toString(36); var num = 128482; num.toString(36); 

请注意这不起作用,因为数字期望一段时间后的十进制数字,而不是字母:

 128482.toString(36); // Syntax error 

此外,您还可以使用JS进行解码:

 parseInt("2r4y", 36); 

对于任何寻找如何在base36中编码字符串的人(因为这个问题, 我如何在javascript中将字符串转换为base36 ,重定向到这里) –

这就是我想出的。

 /* encode / decode strings to / from base36 based on: http://snipplr.com/view/12653/ */ var base36 = { encode: function (str) { return Array.prototype.map.call(str, function (c) { return c.charCodeAt(0).toString(36); }).join(""); }, decode: function (str) { //assumes one character base36 strings have been zero padded by encodeAscii var chunked = []; for (var i = 0; i < str.length; i = i + 2) { chunked[i] = String.fromCharCode(parseInt(str[i] + str[i + 1], 36)); } return chunked.join(""); }, encodeAscii: function (str) { return Array.prototype.map.call(str, function (c) { var b36 = base36.encode(c, ""); if (b36.length === 1) { b36 = "0" + b36; } return b36; }).join("") }, decodeAscii: function (str) { //ignores special characters/seperators if they're included return str.replace(/[a-z0-9]{2}/gi, function (s) { return base36.decode(s); }) } }; var foo = "a-Az-Z 0-9 !@#$%^&*()-_=+[{]};:',<.>/?`~"; var bar = base36.encodeAscii(foo); console.log(foo); console.log(base36.decode(bar)); console.log(''); var bar = "==/" + bar + "\\=="; console.log(bar) console.log(base36.decodeAscii(bar)); //doesn't work console.log(''); var myString = "some string"; var myNum = parseInt(myString, 36); console.log(myNum.toString(36)) myString = "FooBarW000t"; myNum = parseInt(myString, 36); console.log(myNum.toString(36)) myString = "aAzZ09!@#$%^&*()-_=+[{]};:',<.>/?`~"; myNum = parseInt(myString, 36); console.log(myNum.toString(36)) /* Outputs: a-Az-Z 0-9 !@#$%^&*()-_=+[{]};:',<.>/?`~ a-Az-Z 0-9 !@#$%^&*()-_=+[{]};:',<.>/?`~ ==/2p191t3e192i0w1c191l0w0x1s0z10112m12161415192n1p172j3f2l3h1n1m13181o1a1q1b1r2o3i\== ==/a-Az-Z 0-9 !@#$%^&*()-_=+[{]};:',<.>/?`~\== some foobarw000w aazz09 */ 

对于任何想要在python中解码@ imjosh的答案的人(比如说你编写了客户端并且需要解码服务器端),这就是我使用的。 我会在@ imjosh的回答中留下评论,但评论格式不是很好。

 def decodeBase36(str): decoded_str = "" for i in range(0, len(str), 2): char = chr(int(str[i:i+2], 36)) decoded_str += char return decoded_str