PHP fopen 读取带中文URL地址的一点见解


Posted in PHP onSeptember 25, 2012

但昨天在读取一张图片的时候出问题了,后来发现是URL里带中文字符。

例如下面这种情况:

$files = fopen('http://www.website.com/我的PP.jpg', 'rb');

那“$files”的返回值将会是“False”。首先我想到的是将URL用urlencode编码一下,发现还是不行,原来urlencode会把“:”、“/”字符也编码了,那URL就不是URL了。呵,说得有些绕口,那就把“:”、“/”字符的编码替换回来就应该行的。
$url = 'http://www.website.com/我的PP.jpg'; 
$url = preg_replace('/\%3A/i', ':', preg_replace('/\%2F/i', '/', urlencode(urldecode($url)))); $file = fopen($url, 'rb');

试试,嘿~还真是行了。下面再温习一下fopen()函数:

fopen() 函数打开文件或者URL。 如果打开失败,本函数返回FALSE。 打开成功,本函数返回TRUE。

一、语法:

fopen(filename, mode, include_path, context)
参数 描述
filename 规定要打开的文件或 URL。
mode 规定要求到该文件/流的访问类型。可能的值见下表。
include_path 如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
context 规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

二、mode 参数的可能的值:

mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x" 创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
"x+" 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
PHP 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
PHP面向对象编程快速入门
Dec 14 PHP
php生成SessionID和图片校验码的思路和实现代码
Mar 10 PHP
php生成随机密码的几种方法
Jan 17 PHP
解析PHP跨站刷票的实现代码
Jun 18 PHP
php递归创建目录的方法
Feb 02 PHP
PHP使用ODBC连接数据库的方法
Jul 18 PHP
基于命令行执行带参数的php脚本并取得参数的方法
Jan 25 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
May 25 PHP
PHP可逆加密/解密函数分享
Sep 25 #PHP
将时间以距今多久的形式表示,PHP,js双版本
Sep 25 #PHP
PHP中空字符串介绍0、null、empty和false之间的关系
Sep 25 #PHP
PHP获取网址的顶级域名函数代码
Sep 24 #PHP
ThinkPHP关联模型操作实例分析
Sep 23 #PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 #PHP
Thinkphp模板中使用自定义函数的方法
Sep 23 #PHP
You might like
PHP配置心得包含MYSQL5乱码解决
2006/11/20 PHP
实例(Smarty+FCKeditor新闻系统)
2007/01/02 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
基于PHP编程注意事项的小结
2013/04/27 PHP
php实现mysql封装类示例
2014/05/07 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
php中的依赖注入实例详解
2019/08/14 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
css3元素简单的闪烁效果实现(html5 jquery)
2013/12/28 Javascript
js中的cookie的读写操作示例详解
2014/04/17 Javascript
JS实现重新加载当前页面
2016/11/29 Javascript
AngularJS 防止页面闪烁的方法
2017/03/09 Javascript
详解微信小程序中的页面代码中的模板的封装
2017/10/12 Javascript
详解React项目的服务端渲染改造(koa2+webpack3.11)
2018/03/19 Javascript
vue项目中,main.js,App.vue,index.html的调用方法
2018/09/20 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
JavaScript计算正方形面积
2019/11/26 Javascript
详解Python中time()方法的使用的教程
2015/05/22 Python
python非递归全排列实现方法
2017/04/10 Python
python队列queue模块详解
2018/04/27 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python实发邮件实例详解
2019/11/11 Python
Python中实现输入超时及如何通过变量获取变量名
2020/01/18 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
高中生学期学习自我评价
2014/02/24 职场文书
应届毕业生自荐信
2014/05/28 职场文书
省级优秀毕业生主要事迹
2014/05/29 职场文书
应聘会计求职信
2014/06/11 职场文书
办公用房租赁协议书
2014/11/29 职场文书
追讨欠款律师函
2015/05/27 职场文书
优秀学生干部主要事迹材料
2015/11/04 职场文书
《秋天的图画》教学反思
2016/02/19 职场文书
windows11怎么查看自己安装的版本号? win11版本号的查看方法
2021/11/21 数码科技