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
Classes and Objects in PHP5-面向对象编程 [1]
Oct 09 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
javascript some()函数用法详解
Nov 13 PHP
php 把数字转换成汉字的代码
Jul 21 PHP
PHP的Socket网络编程入门指引
Aug 11 PHP
php文档工具PHP Documentor安装与使用方法
Jan 25 PHP
php强制下载文件函数
Aug 24 PHP
PHP中的多种加密技术及代码示例解析
Oct 20 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
PHP实现单条sql执行多个数据的insert语句方法
Oct 11 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
模拟OICQ的实现思路和核心程序(三)
2006/10/09 PHP
第4章 数据处理-php字符串的处理-郑阿奇(续)
2011/07/04 PHP
linux系统上支持php的 iconv()函数的方法
2011/10/01 PHP
PHP+FFMPEG实现将视频自动转码成H264标准Mp4文件
2014/09/24 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
jQuery队列操作方法实例
2014/06/11 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
jQuery实现的无缝广告图片左右滚动功能详解
2016/12/24 Javascript
Angular 表单控件示例代码
2017/06/26 Javascript
使用javascript做在线算法编程
2018/05/25 Javascript
区别JavaScript函数声明与变量声明
2018/09/12 Javascript
React SSR样式及SEO的实践
2018/10/22 Javascript
jQuery实现checkbox全选、反选及删除等操作的方法详解
2019/08/02 jQuery
vue v-for 使用问题整理小结
2019/08/04 Javascript
JS实现碰撞检测效果
2020/03/12 Javascript
jQuery实现开关灯效果
2020/08/02 jQuery
Python按行读取文件的简单实现方法
2016/06/22 Python
Python星号*与**用法分析
2018/02/02 Python
Python聊天室程序(基础版)
2018/04/01 Python
利用python绘制数据曲线图的实现
2020/04/09 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
CSS3中currentColor关键字的妙用
2016/02/27 HTML / CSS
韩都衣舍天猫官方旗舰店:天猫女装销售总冠军
2017/10/10 全球购物
Crocs欧洲官网:Crocs Europe
2020/01/14 全球购物
随机分配座位,共50个学生,使学号相邻的同学座位不能相邻
2014/01/18 面试题
总会计师岗位职责
2014/02/19 职场文书
销售助理岗位职责
2014/02/21 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
理发店策划方案
2014/06/05 职场文书
节约能源标语
2014/06/17 职场文书
个人委托书如何写
2014/09/25 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
话题作文之财富(600字)
2019/12/03 职场文书
Nebula Graph解决风控业务实践
2022/03/31 MySQL
利用uni-app生成微信小程序的踩坑记录
2022/04/05 Javascript