Pergunta

Eu estou tentando criar um script de php mímico que faça o seguinte:

  1. substituir um GET do vaiable cada espaço com um sinal de + ($ var = preg_replace ( "/ \ s /", "+", $ _ GET [ 'var']);)
  2. decodificação de Base64: base64_decode ($ var);

1 i adicionado um método executar uma base64 decodificação:

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

mas nas encostas que UTF-8 não está fazendo o trabalho, então eu tentei o mesmo método, mas com uma 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);
        }
    }

uma última coisa a dizer, a decodificação php sucesso contém sinais especiais, como o sinal registrado e sinal de marca, mas a versão C # não!

Além disso, faz base64_decode php afetada pela linguagem servidor?

Foi útil?

Solução

UTF-7 é muito pouco provável que seja o que você quer. Você realmente precisa saber que codificação PHP está usando. É pode estar usando a codificação padrão para o seu sistema. Felizmente é muito mais fácil de decodificação do que você está fazendo isso:

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

Não há nenhuma necessidade de explicitamente mexer com Encoder:)

Outra possibilidade é que o PHP está usando ISO Latin 1, que é o código página 28591:

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

O manual do PHP inutilmente apenas diz: "Antes do PHP 6, um personagem é o mesmo que um byte Ou seja, há exatamente 256 caracteres diferentes possíveis.". É uma pena que não diz o que cada byte realmente através ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top