Это потому, что% 5E (^) urlen-кодируется PHP (который кодирует все не алфавитные символы кроме -_).Это не соответствует RFC.Браузер видит это и «исправляет» кодировку для соответствия RFC, декодируя все, а затем кодируя только те символы, которые вызывают проблемы в URL-адресах (^ не является одним из них).Php rawurlencode является RFC-совместимым, но на самом деле браузер не может сам RFC-совместимым, и может кодировать только такие вещи, как пробелы и ~, и т. Д. Я хотел бы предложить вам просто urldecode любой токен, который вы получаетеиспользуйте этот результат, который будет согласован в любом случае.Если у вас есть проблемные символы в токене, base64 закодируйте его , чтобы решить это.