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 类型转换函数intval
Jun 20 PHP
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
Jul 03 PHP
实现获取http内容的php函数分享
Feb 16 PHP
Laravel 4 初级教程之视图、命名空间、路由
Oct 30 PHP
Symfony数据校验方法实例分析
Jan 26 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
微信公众号开发之语音消息识别php代码
Aug 08 PHP
ubutu 16.04环境下,PHP与mysql数据库,网页登录验证实例讲解
Jul 20 PHP
phpstudy的php版本自由修改的方法
Oct 18 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
Mar 27 PHP
phpQuery采集网页实现代码实例
Apr 02 PHP
微信小程序和php的登录实现
Apr 01 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
php中常用的预定义变量小结
2012/05/09 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
php中yii框架实例用法
2020/12/22 PHP
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
jQuery拖拽div实现思路
2014/02/19 Javascript
JavaScript中扩展Array contains方法实例
2020/08/23 Javascript
JavaScript模拟push
2016/03/06 Javascript
浅谈jquery设置和获得checkbox选中的问题
2016/08/19 Javascript
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
js实现带搜索功能的下拉框
2020/01/11 Javascript
[02:19]DOTA选手解说齐贺岁
2018/02/11 DOTA
spyder常用快捷键(分享)
2017/07/19 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
python f-string式格式化听语音流程讲解
2019/06/18 Python
django项目环境搭建及在虚拟机本地创建django项目的教程
2019/08/02 Python
django queryset相加和筛选教程
2020/05/18 Python
python3获取控制台输入的数据的具体实例
2020/08/16 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
日本网路线上商品代购服务:转送JAPAN
2016/08/05 全球购物
房地产员工找工作的自我评价
2013/11/15 职场文书
管理部部长岗位职责
2013/12/05 职场文书
建筑班组长岗位职责
2014/01/02 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
岗位职责的构建方法
2014/02/01 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
技校毕业生自荐书
2014/05/23 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
大学生党员自我剖析材料
2014/10/06 职场文书
2014年勤工助学工作总结
2014/11/24 职场文书
民间借贷纠纷案件代理词
2015/05/26 职场文书
大学毕业生自我鉴定范文
2019/06/21 职场文书