header跳转时Location中包含&(ampersand)符号时的问题

PHP中的redirect跳转一般是使用header函数来实现。但如果传递url时,如果里面包含&符号,跳转就会有问题,因为它会被转义成“&”(不包含括号)。我发现wordpress中的wp-redirect函数竟然也有这个问题(尽管其中进行了各种特殊字符处理)。解决办法其实也很简单,跳转前再进行一下替换即可:

$url = str_replace('&', '&', $url); header("Location: $location", true, 302);

注意:此代码不包含对url的其它处理。如果想知道更全面的处理方式,可以参考wordpress的wp_redirect方法。