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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
用PHP制作静态网站的模板框架(四)
Oct 09 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
与文件上传有关的php配置参数总结
Jun 14 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
php+xml编程之SimpleXML的应用实例
Jan 24 PHP
php定时执行任务设置详解
Feb 06 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
Yii2实现UploadedFile上传文件示例
Feb 15 PHP
PHP判断是否是微信打开,浏览器打开的方法
Mar 14 PHP
thinkPHP3.2使用RBAC实现权限管理的实现
Aug 27 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 23 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对象相互引用的内存溢出实例分析
2014/08/28 PHP
php加密解密字符串示例
2016/10/13 PHP
Laravel中使用Queue的最基本操作教程
2017/12/27 PHP
php实现JWT验证的实例教程
2020/11/26 PHP
javascript之querySelector和querySelectorAll使用说明
2011/10/09 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
JS控制按钮10秒钟后可用的方法
2015/12/22 Javascript
使用vue.js2.0 + ElementUI开发后台管理系统详细教程(二)
2017/01/21 Javascript
AngularJS ng-repeat指令及Ajax的应用实例分析
2017/07/06 Javascript
js中变量的连续赋值(实例讲解)
2017/07/08 Javascript
基于vue2实现左滑删除功能
2017/11/28 Javascript
使用vue-cli编写vue插件的方法
2018/02/26 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
vue如何引入sass全局变量
2018/06/28 Javascript
Vue异步组件处理路由组件加载状态的解决方案
2018/09/07 Javascript
vue服务端渲染缓存应用详解
2018/09/12 Javascript
express框架下使用session的方法
2019/07/31 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
2019/10/16 Javascript
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
总结Python编程中函数的使用要点
2016/03/20 Python
python中print()函数的“,”与java中System.out.print()函数中的“+”功能详解
2017/11/24 Python
对python读取zip压缩文件里面的csv数据实例详解
2019/02/08 Python
django使用admin站点上传图片的实例
2019/07/28 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
FC-Moto英国:欧洲最大的摩托车服装和头盔商店之一
2019/08/25 全球购物
管事部库房保管员岗位职责
2014/02/21 职场文书
浪费资源的建议书
2014/03/12 职场文书
2015年安置帮教工作总结
2015/05/22 职场文书
那些美到让人窒息的诗句,值得你收藏!
2019/08/20 职场文书
如何使用flask将模型部署为服务
2021/05/13 Python
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android