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 相关文章推荐
main.php
Dec 09 PHP
PHP-CGI进程CPU 100% 与 file_get_contents 函数的关系分析
Aug 15 PHP
SESSION信息保存在哪个文件目录下以及能够用来保存什么类型的数据
Jun 17 PHP
php中配置文件操作 如config.php文件的读取修改等操作
Jul 07 PHP
基于php-fpm的配置详解
Jun 03 PHP
PHP之生成GIF动画的实现方法
Jun 07 PHP
php实现的click captcha点击验证码类实例
Sep 23 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
smarty高级特性之对象的使用方法
Dec 25 PHP
php事件驱动化设计详解
Nov 10 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
php如何获取Http请求
Apr 30 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和js交互一例-PHP教程,PHP应用
2007/01/03 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
2010/05/18 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
11个PHPer必须要了解的编程规范
2014/09/22 PHP
php用户密码加密算法分析【Discuz加密算法】
2016/10/12 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
对frameset、frame、iframe的js操作示例代码
2013/08/16 Javascript
jQuery删除节点的三个方法即remove()detach()和empty()
2013/12/27 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
基于javascript html5实现多文件上传
2016/03/03 Javascript
深入理解JavaScript函数参数(推荐)
2016/07/26 Javascript
ES6概念 Symbol toString()方法
2016/12/25 Javascript
js仿拉勾网首页穿墙广告效果
2017/03/08 Javascript
javascript json对象小技巧之键名作为变量用法分析
2019/11/11 Javascript
Python 时间处理datetime实例
2008/09/06 Python
python 布尔操作实现代码
2013/03/23 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
python 将json数据提取转化为txt的方法
2018/10/26 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python 用户交互输入input的4种用法详解
2019/09/24 Python
QML使用Python的函数过程解析
2019/09/26 Python
django rest framework 过滤时间操作
2020/07/12 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
remote接口和home接口主要作用
2013/05/15 面试题
《最佳路径》教学反思
2014/04/13 职场文书
岗位说明书怎么写
2014/07/30 职场文书
成本会计岗位职责
2015/02/03 职场文书
基层党建工作简报
2015/07/21 职场文书
先进基层党组织主要事迹材料
2015/11/03 职场文书
大学生活委员竞选稿
2015/11/21 职场文书
详解CSS不定宽溢出文本适配滚动
2021/05/24 HTML / CSS
Python基础数据类型tuple元组的概念与用法
2021/08/02 Python