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 相关文章推荐
一个简易需要注册的留言版程序
Oct 09 PHP
新手学PHP之数据库操作详解及乱码解决!
Jan 02 PHP
如何隐藏你的.php文件
Jan 04 PHP
解析PHP 5.5 新特性
Jul 02 PHP
PHP使用反射机制实现查找类和方法的所在位置
Apr 22 PHP
Yii2使用dropdownlist实现地区三级联动功能的方法
Jul 18 PHP
基于php判断客户端类型
Oct 14 PHP
php 生成签名及验证签名详解
Oct 26 PHP
微信 getAccessToken方法详解及实例
Nov 23 PHP
PHP实现与java 通信的插件使用教程
Aug 11 PHP
php实现简单的守护进程创建、开启与关闭操作
Aug 13 PHP
laravel-admin 中列表筛选方法
Oct 03 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
不用iconv库的gb2312与utf-8的互换函数
2006/10/09 PHP
Joomla下利用configuration.php存储简单数据
2010/05/19 PHP
php解析html类库simple_html_dom(详细介绍)
2013/07/05 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
2013/08/09 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
javascript 终止函数执行操作
2014/02/14 Javascript
javascript面向对象特性代码实例
2014/06/12 Javascript
javascript刷新父页面的各种方法汇总
2014/09/03 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
DOM基础教程之事件类型
2015/01/20 Javascript
PhotoShop给图片自动添加边框及EXIF信息的JS脚本
2015/02/15 Javascript
jquery实现带渐变淡入淡出并向右依次展开的多级菜单效果实例
2015/08/22 Javascript
js实现选中页面文字将其分享到新浪微博
2015/11/05 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
JS生成一维码(条形码)功能示例
2017/01/19 Javascript
jQuery插件echarts实现的单折线图效果示例【附demo源码下载】
2017/03/04 Javascript
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
原生js实现trigger方法示例代码
2019/05/22 Javascript
vue实现数字动态翻牌的效果(开箱即用)
2019/12/08 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
JS实现多选框的操作
2020/06/24 Javascript
Python下的twisted框架入门指引
2015/04/15 Python
Python网络编程使用select实现socket全双工异步通信功能示例
2018/04/09 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
python接口自动化测试之接口数据依赖的实现方法
2019/04/26 Python
python 实现将list转成字符串,中间用空格隔开
2019/12/25 Python
python已协程方式处理任务实现过程
2019/12/27 Python
python3用urllib抓取贴吧邮箱和QQ实例
2020/03/10 Python
EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的
2015/07/24 面试题
《乌鸦和狐狸》教学反思
2014/02/08 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
优秀教师个人材料
2014/12/15 职场文书
地方课程教学计划
2015/01/19 职场文书
谢师宴家长致辞
2015/07/27 职场文书
领导激励员工的演讲稿,各种会上用得到,建议收藏
2019/08/13 职场文书