PHP base64_decode C # eşdeğer

1 Cevap

Ben aşağıdakileri yapın bir php komut dosyası taklit çalışıyorum:

  1. GET yerine Vaiable + işareti ile her alan bulunuyor ($ var = preg_replace ("/ \ s /", "+", $ _GET ['var']);)
  2. base64 çözme için: base64_decode ($ var);

1 i bir yöntem base64 çözme gerçekleştirmek ekledi:

        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);
        }
    }

ancak UTF-8 iş yapmıyor ki yolunmuş, bu yüzden aynı yöntemi denedim ama bir UTF-7 ile

        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);
        }
    }

söylenecek son bir şey, başarılı php çözme tescilli işareti ve marka işareti ama C # sürümü değil gibi özel işaretleri içerir!

Ayrıca, php base64_decode sunucu dil etkilenir nedir?

1 Cevap

UTF-7 Ne istediğinizi olması çok olası değildir. Eğer gerçekten PHP kodlama kullanıyor bilmek gerekir. Bu may sisteminiz için varsayılan kodlamayı kullanıyor. Neyse ki bunu yapıyoruz daha çözmek için çok daha kolay:

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

Ile Encoder :) etrafında açıkça karışıklık gerek yok

Başka bir olasılık PHP kod sayfası 28591 ISO Latin 1, kullanıyor olmasıdır:

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

PHP kılavuzu unhelpfully sadece diyor ki: "PHP 6 önce, bir karakter bir bayt olarak aynı olduğunu, olası tam 256 farklı karakter vardır.." Utanç demiyor her ne byte aslında means ...