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 相关文章推荐
一棵php的类树(支持无限分类)
Oct 09 PHP
通过文字传递创建的图形按钮
Oct 09 PHP
兼容PHP5的PHP目录管理函数库
Jul 10 PHP
php 数学运算验证码实现代码
Oct 11 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
使用PHP函数scandir排除特定目录
Jun 12 PHP
Yii学习总结之数据访问对象 (DAO)
Feb 22 PHP
简介PHP的Yii框架中缓存的一些高级用法
Mar 29 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 PHP
Laravel框架源码解析之入口文件原理分析
May 14 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数组中删除元素的实现代码
2012/06/22 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
解析PHP中如何将数组变量写入文件
2013/06/06 PHP
解决Codeigniter不能上传rar和zip压缩包问题
2014/03/07 PHP
jquery+thinkphp实现跨域抓取数据的方法
2016/10/15 PHP
Yii框架函数简单用法分析
2019/09/09 PHP
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
javascript中数组的sort()方法的使用介绍
2013/12/18 Javascript
js防止DIV布局滚动时闪动的解决方法
2014/10/30 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
[02:40]DOTA2英雄基础教程 先知
2013/11/29 DOTA
跟老齐学Python之眼花缭乱的运算符
2014/09/14 Python
Python多线程、异步+多进程爬虫实现代码
2016/02/17 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python如何爬取个性签名
2018/06/19 Python
Python获取时间范围内日期列表和周列表的函数
2019/08/05 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
财务会计专业应届毕业生求职信
2013/10/18 职场文书
卫校毕业生自我鉴定
2013/10/31 职场文书
优乐美广告词
2014/03/14 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
大学生社会实践方案
2014/05/11 职场文书
廉洁家庭事迹材料
2014/05/15 职场文书
弄虚作假心得体会
2014/09/10 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
作文评语怎么写
2014/12/25 职场文书
PyQt5 显示超清高分辨率图片的方法
2021/04/11 Python
Redis延迟队列和分布式延迟队列的简答实现
2021/05/13 Redis
Nginx配置Https安全认证的实现
2021/05/26 Servers
新手入门Jvm-- JVM对象创建与内存分配机制
2021/06/18 Java/Android
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
2021/11/11 HTML / CSS
python前后端自定义分页器
2022/04/13 Python