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执行速度全攻略(上)
Oct 09 PHP
繁体中文转换为简体中文的PHP函数
Oct 09 PHP
php生成局部唯一识别码LUID的代码
Oct 06 PHP
利用php绘制饼状图的实现代码
Jun 07 PHP
PHP小教程之实现双向链表
Jun 12 PHP
ThinkPHP路由详解
Jul 27 PHP
PHP性能测试工具xhprof安装与使用方法详解
Apr 29 PHP
php获取微信基础接口凭证Access_token
Aug 23 PHP
PHP封装mysqli基于面向对象的mysql数据库操作类与用法示例
Feb 25 PHP
php上传后台无法收到数据解决方法
Oct 28 PHP
php传值和传引用的区别点总结
Nov 19 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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代码
2008/04/09 PHP
纯php生成随机密码
2015/10/30 PHP
PHP控制前台弹出对话框的实现方法
2016/08/21 PHP
ThinkPHP中获取指定日期后工作日的具体日期方法
2018/10/14 PHP
jQuery 验证插件 Web前端设计模式(asp.net)
2010/10/17 Javascript
JS前端框架关于重构的失败经验分享
2013/03/17 Javascript
js 使FORM表单的所有元素不可编辑的示例代码
2013/10/17 Javascript
在javascript中执行任意html代码的方法示例解读
2013/12/25 Javascript
初始Nodejs
2014/11/08 NodeJs
javascript实现汉字转拼音代码分享
2015/04/20 Javascript
利用Node.js编写跨平台的spawn语句详解
2017/02/12 Javascript
three.js绘制地球、飞机与轨迹的效果示例
2017/02/28 Javascript
浅析Angular19 自定义表单控件
2018/01/31 Javascript
JavaScript实现简单的文本逐字打印效果示例
2018/04/12 Javascript
详解基于Vue2.0实现的移动端弹窗(Alert, Confirm, Toast)组件
2018/08/02 Javascript
如何优雅的在一台vps(云主机)上面部署vue+mongodb+express项目
2019/01/20 Javascript
微信公众号平台接口开发 获取微信服务器IP地址方法解析
2019/08/14 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
Python Requests安装与简单运用
2016/04/07 Python
python中文编码与json中文输出问题详解
2018/08/24 Python
Python内存管理实例分析
2019/07/10 Python
python sorted方法和列表使用解析
2019/11/18 Python
Python二维数组实现求出3*3矩阵对角线元素的和示例
2019/11/29 Python
python 实现多维数组(array)排序
2020/02/28 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
Django values()和value_list()的使用
2020/03/31 Python
pandas分批读取大数据集教程
2020/06/06 Python
CSS3 文字动画效果
2020/11/12 HTML / CSS
有模特经验的简历自我评价
2013/09/19 职场文书
聘用意向书范本
2014/04/01 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
2015新学期家长寄语
2015/02/26 职场文书
工作试用期自我评价
2015/03/10 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书