Sinal de adição com consulta GET

Eu tenho um script PHP que faz criptografia básica de uma seqüência de caracteres através do método abaixo:

<?php
$key = 'secretkey';
$string = $_GET['str'];

if ($_GET['method'] == "decrypt")
{
    $output = rtrim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, md5($key), base64_decode($string), MCRYPT_MODE_CBC, md5(md5($key))), "\0");
}

if ($_GET['method'] == "encrypt")
{
    $output= base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, md5($key), $string, MCRYPT_MODE_CBC, md5(md5($key))));
}

echo $output;
?>

Um exemplo de URL para criptografar uma string seria assim:

Método Encrypt.php? = Encrypt & str = the quick fox

O que retornaria isso como a cadeia criptografada:

LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =

Agora, para descriptografar a string, tudo o que você precisa fazer é alterar a consulta "method" para "descriptografar", da seguinte maneira:

Método Encrypt.php? = Decriptografar & str = LCuT / ieVa6cl3 / 4VtzE + jd9QPT3kvHYYJFqG6tY3P0Q =

O único problema é que, quando essa cadeia criptografada é descriptografada, ela retorna isso:

Yƒ§rYV} 5³5Äš · nßì (ñïX8Þ; b

Eu reduzi o problema ao sinal de adição que está na cadeia criptografada. O método GET do PHP parece converter um sinal de mais em um espaço em branco. Eu procurei este bug e descobri que ele já foi arquivadoaqui. Eu tentei diferentes métodos listados nessa página e outros sem sucesso. O mais próximo que cheguei é usando isso:

$fixedstring = str_replace(" ", "+", $string);

e, em seguida, usando $ fixedstring nos métodos de criptografia, o problema é que, por descriptografia, todos os espaços em branco são convertidos em sinais de adição. Alguma ideia?

Eu sei que usar o POST faria mais sentido, mas estou usando o GET por razões específicas. Vou poupar os detalhes.

questionAnswers(4)

yourAnswerToTheQuestion