代码之家  ›  专栏  ›  技术社区  ›  Mike -- No longer here

比base64更好的东西,可以对不占用太多处理能力的数据进行编码

  •  1
  • Mike -- No longer here  · 技术社区  · 10 年前

    我有一个网站,用户可以在其中添加多个项目,有时URL可能很长。我想通过使用base64编码,我会传递URL,但它包含一个斜杠,我用它来分隔项目,因为我的web服务器无法处理长度超过255个字符的路径名(2个斜杠之间的任何一个),否则我会收到403错误。

    有没有其他方法可以用javascript快速编码数据,这样结果中出现斜杠的几率为0%?

    我正在寻找一些不太需要处理器的东西,如果可能的话,我想寻找比角色交换更好的东西。

    如果我需要访问一个库,我会理解,但javascript(据我所知)内置的唯一编码是base64(通过atob函数),我想要一些不同的东西。

    我还希望能够使该解决方案也适用于旧的web浏览器。

    2 回复  |  直到 10 年前
        1
  •  2
  •   code_monk    10 年前

    你需要的是 encodeURIComponent ,它是javascript规范的一部分,自动包含在所有javascript环境中

    var url = 'example.com/someextenstion/' + encodeURIComponent(theString);
    
        2
  •  0
  •   bmacnaughton    10 年前

    有很多方法可以解决这个问题,但最简单的方法之一是实现 atob btoa 并将其修改为使用 - 而不是 / 编码时。您必须重命名这些函数,这样它们就不会屏蔽标准函数,但这里有一些JavaScript源代码可以做到这一点: github 。在该特定实现中,只需替换 / 在里面 _ALPHA 用一个 - (或您选择的任何角色)。

    按照Amit的建议做可能会更快:使用标准函数并快速替换 / 转换时: str.replace(/\//g,'-'); 并在解码时执行相反的操作,但在这个应用程序中,性能似乎并不重要。