【问题标题】:How can I get hash from string and then string from hash back in javascript如何从字符串中获取哈希,然后在javascript中从哈希中获取字符串
【发布时间】:2013-08-28 22:47:32
【问题描述】:

我有一个很长(约 70,000 个字符)的字符串,我想插入到 URL 中。我需要在浏览器中实现后退,因此当 URL 更改时,我的应用程序会做出反应并更改其状态。

这是我用来从字符串生成哈希码的函数:

String.prototype.hashCode = function () {
            var hash = 0, i, char;
            if (this.length == 0) return hash;
            var l = this.length;
            for (i = 0; i < l; i++) {
                char = this.charCodeAt(i);
                hash = ((hash << 5) - hash) + char;
                hash |= 0; // Convert to 32bit integer
            }
            return hash;
        };

但是我怎样才能从它的哈希中取回我的字符串呢?

编辑:有没有其他方法可以压缩这么长的网址?

【问题讨论】:

    标签: javascript string hash hashcode


    【解决方案1】:

    你不能。哈希是一种单向函数。 560,000 位不能转换成 32 位再转换回来。

    【讨论】:

      【解决方案2】:

      魔法! (说不可能)

      【讨论】:

      • 有没有其他方法可以压缩这么长的网址?
      • 您可以通过 POST 传输该数据吗?然后,查询字符串将不可见。
      • 我不想传输数据。我需要在 url 中存储应用程序状态。所以当我按下后退时,我的应用程序会做出反应,我也想将 url 传递给第三方,所以当他们复制粘贴它时,应用程序将保留它的状态
      • 好吧,我猜你可以散列字符串(包含状态的完整描述)并将相关状态保存在某种数据库中。然后,当哈希值在 URL 中传递时,您从数据库中检索状态并使用它构建您的页面。
      【解决方案3】:

      根据您的用例,也许您可​​以使用 URL 缩短服务来压缩您的 URL。看这个例子:https://twitter.com/peterjaric/status/336941762838945792(我用 tinyurl 压缩过长的 data-uris)。

      指向 tinyurl 页面的直接链接:http://tinyurl.com/peterjaric-page1

      【讨论】:

        猜你喜欢
        • 2018-09-01
        • 2017-05-28
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 1970-01-01
        • 2015-10-01
        • 1970-01-01
        • 2011-10-22
        相关资源
        最近更新 更多