眾所周知,PHP網(wǎng)站跳轉(zhuǎn)有三種方法:JS岖研、HTML META Refresh卿操、PHP header("location: $url")警检。但是這里有一個(gè)非常小的細(xì)節(jié),很容易導(dǎo)致出錯(cuò)害淤。
有一次制作一個(gè)跳轉(zhuǎn)程序扇雕,結(jié)果忽略了這一點(diǎn),導(dǎo)致跳轉(zhuǎn)其實(shí)都是沒有成功窥摄。
<?php
error_reporting(7);
$url = urldecode( trim($_REQUEST['url']));
if($url)
{
header("Location: $url");
} else {
exit('Error Input,<a href="http://www.***.com/?f=go.php">go back</a>');
}
當(dāng)訪問地址為:http://www.***.com/go.php?url=http%3A%2F%2Fwww.zbphp.com%2F 的時(shí)候镶奉,firefox瀏覽器是正常的。后來把這個(gè)跳轉(zhuǎn)程序復(fù)制到公司的另外一個(gè)網(wǎng)站崭放,讓QQ上的一些好友測試哨苛,結(jié)果很多人都說打不開:IE內(nèi)核的瀏覽器直接提示無法訪問或者找不到,chrome有時(shí)候會(huì)提示被重置或找不到币砂,使用firefox測試也偶偶會(huì)提示無法找到移国,但多刷新一次才顯示正常。
仔細(xì)檢查代碼道伟,是沒有問題的。況且firefox是可以跳轉(zhuǎn)使碾,后想到了以往閱讀到的一點(diǎn)就是:IE瀏覽器如果輸出的內(nèi)容字節(jié)太忻刍铡(小于512字節(jié)),那么就會(huì)被忽略票摇。然后將源碼由header location跳轉(zhuǎn)修改為 js html才所有瀏覽器都測試通過拘鞋,原先偶偶出現(xiàn)firefox點(diǎn)擊提示找不到xxx服務(wù)器也沒有再出現(xiàn)過,現(xiàn)go.php全部源碼:
<?php
error_reporting(7);
function gheader($url)
{
echo '<html><head><meta http-equiv="Content-Language" content="zh-CN"><meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312"><meta http-equiv="refresh"
content="0;url='.$url.'"><title>loading ... </title></head><body><div style="display:none">
<script type="text/javascript">var cnzz_protocol = (("https:" == document.location.protocol) ? " https://" : " http://");document.write(unescape("%3Cspan id=\'cnzz_stat_icon_5696423\'%3E%3C/span%3E%3Cscript src=\'" + cnzz_protocol + "s9.#/stat.php%3Fid%3D5696423%26show%3Dpic1\' type=\'text/javascript\'%3E%3C/script%3E"));</script></div>
<script>window.location="'.$url.'";</script></body></html>';
exit();
}
$url = urldecode( trim($_REQUEST['url']));
if($url)
{
gheader($url);
} else {
exit('Error Input,<a href="http://www.***.com/?f=go.php">go back</a>');
}
對于PHP跳轉(zhuǎn)矢门,我認(rèn)為最好的方法就是用JS+HTML META盆色。HTML META可以保證訪客在禁用JS的情況下可以照樣跳轉(zhuǎn)。