使用PHP程序header location 进行跳转的注意的一个细节!
2013-10-24 11:44
597 查看
众所周知,PHP网站跳转有三种方法:JS、HTML META Refresh、PHP header("location: $url")。但是这里有一个非常小的细节,很容易导致出错。
有一次制作一个跳转程序,结果忽略了这一点,导致跳转其实都是没有成功。
程序全部源码如下,程序地址:http://www.***.com/go.php
当访问地址为:http://www.***.com/go.php?url=http%3A%2F%2Fwww.zbphp.com%2F 的时候,firefox浏览器是正常的。后来把这个跳转程序复制到公司的另外一个网站,让QQ上的一些好友测试,结果很多人都说打不开:IE内核的浏览器直接提示无法访问或者找不到,chrome有时候会提示被重置或找不到,使用firefox测试也偶偶会提示无法找到,但多刷新一次才显示正常。
仔细检查代码,是没有问题的。况且firefox是可以跳转,后想到了以往阅读到的一点就是:IE浏览器如果输出的内容字节太小(小于512字节),那么就会被忽略。然后将源码由header location跳转修改为 js html才所有浏览器都测试通过,原先偶偶出现firefox点击提示找不到xxx服务器也没有再出现过,现go.php全部源码:
对于PHP跳转,我认为最好的方法就是用JS+HTML META。HTML META可以保证访客在禁用JS的情况下可以照样跳转。
如果您有更好的方法,欢迎回帖或发送邮件给我,我的邮箱 admin@zbphp.com。
有一次制作一个跳转程序,结果忽略了这一点,导致跳转其实都是没有成功。
程序全部源码如下,程序地址:http://www.***.com/go.php
<?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>'); }
当访问地址为:http://www.***.com/go.php?url=http%3A%2F%2Fwww.zbphp.com%2F 的时候,firefox浏览器是正常的。后来把这个跳转程序复制到公司的另外一个网站,让QQ上的一些好友测试,结果很多人都说打不开:IE内核的浏览器直接提示无法访问或者找不到,chrome有时候会提示被重置或找不到,使用firefox测试也偶偶会提示无法找到,但多刷新一次才显示正常。
仔细检查代码,是没有问题的。况且firefox是可以跳转,后想到了以往阅读到的一点就是:IE浏览器如果输出的内容字节太小(小于512字节),那么就会被忽略。然后将源码由header location跳转修改为 js html才所有浏览器都测试通过,原先偶偶出现firefox点击提示找不到xxx服务器也没有再出现过,现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.cnzz.com/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跳转,我认为最好的方法就是用JS+HTML META。HTML META可以保证访客在禁用JS的情况下可以照样跳转。
如果您有更好的方法,欢迎回帖或发送邮件给我,我的邮箱 admin@zbphp.com。
相关文章推荐
- PHP中用header("Location: test.php")进行跳转时应注意的问题
- header("location:test.php")跳转成功需要注意的
- header("location:test.php")跳转成功需要注意的
- Netbeans使用xdebug插件调试PHP程序的一个注意事项
- PHP程序开发之使用header定义一个php页面为utf-8编码或GBK编码
- 使用PHP header进行页面跳转出现的问题解疑
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- 队列和栈面试题(一)— 请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据
- 在int9中断中如何使用call方式进行程序跳转
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- PHP Header用于页面跳转要注意的几个问题总结
- 使用fiddler对手机上的程序进行抓包 用fiddler对手机上的程序进行抓包,网上有很多的资料,这里写一下来进行备用。 前提: 1.必须确保安装fiddler的电脑和手机在同一个wifi环境下
- PHP Header用于页面跳转要注意的几个问题总结
- 使用NPO问题进行规约应注意的几个细节
- 使用Spring和SpringMVC管理bean时要注意的一个小细节
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- PHP中将对数据库的操作,封装成一个工具类以及学会使用面向对象的方式进行编程
- 编写一个程序,要求用户输入最多10个高尔夫成绩,并将其存储在一个数组中。 程序允许用户提早结束输入,并在一行上显示所有成绩,然后报告平均成绩。 请使用3个数组处理函数来分别进行输入、显示和计算
- 关于PHP程序使用file_get_content()函数进行抓取PHP程序与smarty结合编译过程中产生的静态文件,抓取不了?连接超时?(地址映射)
- php中使用$_REQUEST需要注意的一个问题