Думаю лучше через htaccess, но лучше бы разобраться почему вообще такой урл создаётся.
И ещё, не друпалом ли пользуетесь? Если да то
здесь аналогичная ошибка.
Либо как вариант считывать в $_SERVER['REQUEST_URI'] далее писать проверку на эти коды '%3F', '%3D' и заменять их на символы, далее создавать новую ссыль и потом обычным header редиректом перенаправлять
header("HTTP/1.1 301 Moved Permanently");
header("Location: novaya_ssilka");
Подробнее о редиректах htaccess & php читайте
тут.