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+AJAX传送中文会导致乱码的问题的解决方法
Sep 08 PHP
php利用iframe实现无刷新文件上传功能的代码
Sep 29 PHP
浅析SVN常见问题及解决方法
Jun 21 PHP
修改ThinkPHP缓存为Memcache的方法
Jun 25 PHP
php正则表达式学习笔记
Nov 13 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
PHP基于mssql扩展远程连接MSSQL的简单实现方法
Oct 08 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
Laravel 5.4.36中session没有保存成功问题的解决
Feb 19 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
Apr 20 PHP
Laravel实现短信注册的示例代码
May 29 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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的array_diff()函数在处理大数组时的效率问题
2011/11/27 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
PHP中使用foreach()遍历二维数组的简单实例
2016/06/13 PHP
javascript生成/解析dom的CDATA类型的字段的代码
2007/04/22 Javascript
firefox下input type="file"的size是多大
2011/10/24 Javascript
document.write()及其输出内容的样式、位置控制
2013/08/12 Javascript
jquery增加时编辑jqGrid(实例代码)
2013/11/08 Javascript
javascript简单性能问题及学习笔记
2014/02/04 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
jQuery实现textarea自动增长宽高的方法
2015/12/18 Javascript
浅谈JavaScript 数据属性和访问器属性
2016/09/01 Javascript
jQuery实现的模拟弹出窗口功能示例
2016/11/24 Javascript
基于angular实现模拟微信小程序swiper组件
2017/06/11 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
2019/03/08 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
自己编程中遇到的Python错误和解决方法汇总整理
2015/06/03 Python
Python简单格式化时间的方法【strftime函数】
2016/09/18 Python
利用标准库fractions模块让Python支持分数类型的方法详解
2017/08/11 Python
python实时检测键盘输入函数的示例
2019/07/17 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
opencv3/C++图像像素操作详解
2019/12/10 Python
有关pycharm登录github时有的时候会报错connection reset的问题
2020/09/15 Python
亚历山大·王官网:Alexander Wang
2017/06/23 全球购物
怎样声明接口
2014/09/19 面试题
教师队伍管理制度
2014/01/14 职场文书
京剧自荐信
2014/01/26 职场文书
食品厂厂长岗位职责
2014/01/30 职场文书
民族团结先进集体事迹材料
2014/05/22 职场文书
2015年三万活动总结
2015/03/25 职场文书
元旦主持词开场白
2015/05/29 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
Promise面试题详解之控制并发
2021/05/14 面试题
redis击穿 雪崩 穿透超详细解决方案梳理
2022/03/17 Redis
Java代码规范与质量检测插件SonarLint的使用
2022/08/05 Java/Android
Win11 22H2 2022怎么更新? 获得Win1122H22022版本升级技巧
2022/09/23 数码科技