Почему при одной и той же операции — разный результат?
Специальные символы в адресной строке (например, +) нужно прогонять через urlencode и только потом подставлять туда. В вашем случае должно быть так: http://example.com?d=AAEBAf0GAe0%2BAgAA
Обратная операция (декодирование) происходит автоматически, поэтому ваши строки не одинаковы.
ideone.com/ySrtbV
Символ "+" в GET запросе воспринимается браузером как пробел.