元のレスはもっと短くする方法

s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
uri_unescape($str);

半分以下