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 相关文章推荐
如何给phpadmin一个保护
Oct 09 PHP
提升PHP执行速度全攻略(下)
Oct 09 PHP
PHP 数组入门教程小结
May 20 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
PHP封装分页函数实现文本分页和数字分页
Oct 23 PHP
WordPress中is_singular()函数简介
Feb 05 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php面向对象值单例模式
May 03 PHP
php实现简单加入购物车功能
Mar 07 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 PHP
PHP中如何使用Redis接管文件存储Session详解
Nov 28 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+dbfile开发小型留言本
2006/10/09 PHP
php join函数应用
2011/05/04 PHP
解析PHP中$_FILES的使用以及注意事项
2013/07/05 PHP
PHP删除数组中特定元素的两种方法
2019/02/28 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
jquery+json实现的搜索加分页效果
2010/03/31 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
JavaScript中的Reflect对象详解(ES6新特性)
2016/07/22 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
JS获取子、父、兄节点方法小结
2017/08/14 Javascript
用 Vue.js 递归组件实现可折叠的树形菜单(demo)
2017/12/25 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
python 随机数生成的代码的详细分析
2011/05/15 Python
Python判断Abundant Number的方法
2015/06/15 Python
Django中Forms的使用代码解析
2018/02/10 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
2019/02/27 Python
python实现AES加密解密
2019/03/28 Python
python selenium爬取斗鱼所有直播房间信息过程详解
2019/08/09 Python
Python标准库json模块和pickle模块使用详解
2020/03/10 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
托管代码(Managed Code)和非托管代码(Unmanaged Code)有什么区别
2014/09/29 面试题
const和static readonly区别
2013/05/20 面试题
高三毕业生自我鉴定
2013/12/20 职场文书
计算机专业优秀大学生自我总结
2014/01/21 职场文书
营销与策划专业求职信
2014/06/20 职场文书
2014迎接教师节演讲稿
2014/09/10 职场文书
治庸问责心得体会
2014/09/12 职场文书
2015年高二班主任工作总结
2015/05/25 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
浅谈python中的多态
2021/06/15 Python
MySQL系列之十一 日志记录
2021/07/02 MySQL
配置Kubernetes外网访问集群
2022/03/31 Servers