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如何得到当前页和上一页的地址?
Nov 27 PHP
PHP 编程的 5个良好习惯
Feb 20 PHP
ThinkPHP的L方法使用简介
Jun 18 PHP
PHP中的排序函数sort、asort、rsort、krsort、ksort区别分析
Aug 18 PHP
PHP内置的Math函数效率测试
Dec 01 PHP
php猴子选大王问题解决方法
May 12 PHP
PHP实现清除wordpress里恶意代码
Oct 21 PHP
PHP常见的6个错误提示及解决方法
Jul 07 PHP
PHP中使用OpenSSL生成证书及加密解密
Feb 05 PHP
thinkPHP5 tablib标签库自定义方法详解
May 10 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
php实现的生成排列算法示例
Jul 25 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
如何将数据从文本导入到mysql
2006/10/09 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
PHP中使用Memache作为进程锁的操作类分享
2015/03/30 PHP
利用PHP如何写APP接口详解
2016/08/23 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
javascript之可拖动的iframe效果代码
2008/08/01 Javascript
javascript Firefox与IE 替换节点的方法
2010/02/24 Javascript
js通过googleAIP翻译PHP系统的语言配置的实现代码
2011/10/17 Javascript
JQuery模板插件 jquery.tmpl 动态ajax扩展
2011/11/10 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
原生js和jQuery随意改变div属性style的名称和值
2014/10/22 Javascript
PHP配置文件php.ini中打开错误报告的设置方法
2015/01/09 PHP
js实现双击图片放大单击缩小的方法
2015/02/17 Javascript
浅谈Jquery核心函数
2015/06/18 Javascript
js判断复选框是否选中及选中个数的实现代码
2016/05/30 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
promise处理多个相互依赖的异步请求(实例讲解)
2017/08/03 Javascript
vue页面使用阿里oss上传功能的实例(一)
2017/08/09 Javascript
老生常谈JavaScript面向对象基础与this指向问题
2017/10/16 Javascript
JavaScript登录验证基础教程
2017/11/01 Javascript
angular 实时监听input框value值的变化触发函数方法
2018/08/31 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
2019/10/10 Javascript
vue+element_ui上传文件,并传递额外参数操作
2020/12/05 Vue.js
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
解决pandas 作图无法显示中文的问题
2018/05/24 Python
python 定义给定初值或长度的list方法
2018/06/23 Python
django框架model orM使用字典作为参数,保存数据的方法分析
2019/06/24 Python
使用HTML5 Canvas为图片填充颜色和纹理的教程
2016/03/21 HTML / CSS
高中生期末评语
2014/01/28 职场文书
市场拓展计划书
2014/05/03 职场文书
元旦主持词开场白
2015/05/29 职场文书
致运动员加油稿
2015/07/21 职场文书
乡镇干部学习心得体会
2016/01/23 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书