当前位置:  开发笔记 > 编程语言 > 正文

PHP base64_decode C#等价

如何解决《PHPbase64_decodeC#等价》经验,为你挑选了1个好方法。

我正在尝试模仿执行以下操作的PHP脚本:

    用+符号替换GET变量的每个空格($ var = preg_replace("/\s /","+",$ _ GET ['var']);)

    解码为base64:base64_decode($ var);

我添加了一个方法执行base64解码:

        public string base64Decode(string data)
    {
        try
        {
            System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();

            System.Text.Decoder utf8Decode = encoder.GetDecoder();

            byte[] todecode_byte = Convert.FromBase64String(data);
            int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
            char[] decoded_char = new char[charCount];
            utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
            string result = new String(decoded_char);
            return result;
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Decode" + e.Message);
        }
    }

但它接缝说UTF-8没有完成这项工作,所以我尝试了相同的方法,但使用的是UTF-7

        public string base64Decode(string data)
    {
        try
        {
            System.Text.UTF7Encoding encoder = new System.Text.UTF7Encoding();

            System.Text.Decoder utf7Decode = encoder.GetDecoder();

            byte[] todecode_byte = Convert.FromBase64String(data);
            int charCount = utf7Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
            char[] decoded_char = new char[charCount];
            utf7Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
            string result = new String(decoded_char);
            return result;
        }
        catch (Exception e)
        {
            throw new Exception("Error in base64Decode" + e.Message);
        }
    }

最后要说的是,成功的php解码包含特殊标志,如注册标志和商标标志,但C#版本没有!

另外,php base64_decode是否受服务器语言的影响?



1> Jon Skeet..:

UTF-7不太可能是你想要的.你真的需要知道PHP正在使用什么编码.它可能正在使用系统的默认编码.幸运的是,解码比你制作它容易得多:

public static string base64Decode(string data)
{
    byte[] binary = Convert.FromBaseString(data);
    return Encoding.Default.GetString(binary);
}

没有必要明确地搞乱Encoder:)

另一种可能性是PHP使用ISO Latin 1,即代码页28591:

public static string base64Decode(string data)
{
    byte[] binary = Convert.FromBaseString(data);
    return Encoding.GetEncoding(28591).GetString(binary);
}

PHP手册无益地说:"在PHP 6之前,一个字符与一个字节相同.也就是说,可能有256个不同的字符." 遗憾的是它并没有说明每个字节实际意味着什么......

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有