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 相关文章推荐
linux下 C语言对 php 扩展
Dec 14 PHP
php下通过IP获取地理位置的代码(小偷程序)
Jun 09 PHP
redis 队列操作的例子(php)
Apr 12 PHP
浅析PHP 按位与或 (^ 、&)
Jun 21 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php 获取SWF动画截图示例代码
Feb 10 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
php获取从百度、谷歌等搜索引擎进入网站关键词的方法
Jul 08 PHP
php_pdo 预处理语句详解
Nov 21 PHP
PHP文字转图片功能原理与实现方法分析
Aug 31 PHP
如何利用PHP实现上传图片功能详解
Sep 24 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缓冲区为你的站点加速
2015/10/10 PHP
详解PHP实现定时任务的五种方法
2016/07/25 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
PHP实现随机发扑克牌
2020/04/22 PHP
jQuery初学:find()方法及children方法的区别分析
2011/01/31 Javascript
扩展JavaScript功能的正确方法(译文)
2012/04/12 Javascript
jquery滚动组件(vticker.js)实现页面动态数据的滚动效果
2013/07/03 Javascript
JS截取字符串常用方法详细整理
2013/10/28 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
2013/11/15 Javascript
javascript实现的一个带下拉框功能的文本框
2014/05/08 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
JavaScript数组Array对象增加和删除元素方法总结
2015/01/20 Javascript
JavaScript SHA1加密算法实现详细代码
2016/10/06 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
jQuery判断自定义属性data-val用法示例
2019/01/07 jQuery
JQuery发送ajax请求时中文乱码问题解决
2019/11/14 jQuery
[04:48]DOTA2上海特锦赛小组赛第三日 TOP10精彩集锦
2016/02/28 DOTA
Python break语句详解
2014/03/11 Python
python 实时遍历日志文件
2016/04/12 Python
Flask-Mail用法实例分析
2018/07/21 Python
keras处理欠拟合和过拟合的实例讲解
2020/05/25 Python
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
世界各地的旅游、观光和活动:Isango!
2019/10/29 全球购物
传播学毕业生求职信
2013/10/11 职场文书
党员培训思想汇报
2014/01/07 职场文书
文员岗位职责范本
2014/03/08 职场文书
年度优秀员工获奖感言
2014/08/15 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
工作会议通知
2015/04/15 职场文书
女性健康知识讲座主持词
2015/07/04 职场文书
导游词之江苏同里古镇
2019/11/18 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
python 单机五子棋对战游戏
2022/04/28 Python