首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是C#的JavaScript的HttpServerUtility.UrlTokenDecode?

什么是C#的JavaScript的HttpServerUtility.UrlTokenDecode?
EN

Stack Overflow用户
提问于 2015-08-18 08:18:08
回答 4查看 1.5K关注 0票数 1

JavaScript中,如何解码用C#使用HttpServerUtility.UrlTokenEncode编码的字符串?

在其他语言中有一些类似的语言,但我无法用JS重写它们。任何帮助都将不胜感激。

这是Java版本。

这是Objective-C版本。

更新:

C#的URLTokenEncode与base64编码不一样,例如,最后一个字符总是填充字符的数量,所以有些字符需要适当替换。

我试过decodeURIComponent,但没有成功解码。这是有意义的,因为字符串是由特定方法编码的。不是base64。

例如,这只是C#的UrlTokenEncode字符串的一部分:

vj4_fv7__7-_Pr6-ff3_Pr6_vz8_________________f____79_vP1_vb3_vz8____________________AAA1

这是使用Objective/Java方法正确解码的版本:

vj4/fv7//7+/Pr6+ff3/Pr6/vz8/////////////////f////79/vP1/vb3/vz8////////////////////AAA=

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-08-18 10:25:29

最后,我成功地将目标-c版 of URLTokenDecode by 杰弗里·托马斯转换成了JavaScript,并且成功了。

这里是函数:

代码语言:javascript
复制
function URLTokenDecode(token) {

    if (token.length == 0) return null;

    // The last character in the token is the number of padding characters.
    var numberOfPaddingCharacters = token.slice(-1);

    // The Base64 string is the token without the last character.
    token = token.slice(0, -1);

    // '-'s are '+'s and '_'s are '/'s.
    token = token.replace(/-/g, '+');
    token = token.replace(/_/g, '/');

    // Pad the Base64 string out with '='s
    for (var i = 0; i < numberOfPaddingCharacters; i++)
        token += "=";

    return token;
}

如果您使用的是,这里是$filter

代码语言:javascript
复制
app.filter('URLTokenDecode', function () {
        return function (token) {

            if (token.length == 0) return null;

            // The last character in the token is the number of padding characters.
            var numberOfPaddingCharacters = token.slice(-1);

            // The Base64 string is the token without the last character.
            token = token.slice(0, -1);

            // '-'s are '+'s and '_'s are '/'s.
            token = token.replace(/-/g, '+');
            token = token.replace(/_/g, '/');

            // Pad the Base64 string out with '='s
            for (var i = 0; i < numberOfPaddingCharacters; i++)
                token += "=";

            return token;
        }

});
票数 2
EN

Stack Overflow用户

发布于 2015-08-18 08:30:45

我想那应该是解码组分:

decodeuricomponent.asp

要在JavaScript中解码UTF8-Base64编码的字符串:

代码语言:javascript
复制
var str2 = decodeURIComponent(escape(window.atob(b64)));
console.log(str2);

要在JavaScript中将UTF8 8-JavaScript-字符串编码为这样的代码:

代码语言:javascript
复制
var str = "äöüÄÖÜçéèñ";
var b64 = window.btoa(unescape(encodeURIComponent(str)))
console.log(b64);

看来UrlTokenDecode有点复杂。

100%确定的最佳方法是使用AJAX在服务器端调用UrlTokenDecode,然后返回一个简单的base64 64编码字符串。

代码语言:javascript
复制
public static byte[] UrlTokenDecode (string input)
{
    if (input == null)
        throw new ArgumentNullException ("input");
    if (input.Length < 1)
        return new byte[0];
    byte[] bytes = Encoding.ASCII.GetBytes (input);
    int inputLength = input.Length - 1;
    int equalsCount = (int)(((char)bytes[inputLength]) - 0x30);
    char[] ret = new char[inputLength + equalsCount];
    int i = 0;
    for (; i < inputLength; i++) {
        switch ((char)bytes[i]) {
            case '-':
                ret[i] = '+';
                break;

            case '_':
                ret[i] = '/';
                break;

            default:
                ret[i] = (char)bytes[i];
                break;
        }
    }
    while (equalsCount > 0) {
        ret[i++] = '=';
        equalsCount--;
    }

    return Convert.FromBase64CharArray (ret, 0, ret.Length);
}

来源

票数 0
EN

Stack Overflow用户

发布于 2017-09-08 12:53:48

这可能违反了发布规则,因为它不是问题的答案,但是,我在查找UrlTokenEncode方法(而不是解码)时发现了这个页面,所以使用这里的信息,我制定了以下方法,希望能帮助其他人:

代码语言:javascript
复制
function urlTokenEncode(str) {
    var b64 = btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g,
            function(match, t) {
                return String.fromCharCode('0x' + t);
            })),
        padChars = b64.match(/=/g);
    return b64.replace(/=/g, "") + (padChars == null ? 0 : padChars.length);
}

测试和使用C# HttpServerUtility.UrlTokenEncodeHttpServerUtility.UrlTokenEncode

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32067143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档