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与ASP
Oct 09 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
Sep 23 PHP
windwos下使用php连接oracle数据库的过程分享
May 26 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
YiiFramework入门知识点总结(图文教程)
Dec 28 PHP
form表单传递数组数据、php脚本接收的实例
Feb 09 PHP
PHP性能分析工具xhprof的安装使用与注意事项
Dec 19 PHP
php实现socket推送技术的示例
Dec 20 PHP
PHP实现动态添加XML中数据的方法
Mar 30 PHP
PHP利用DWZ.CN服务生成短网址
Aug 11 PHP
laravel框架 laravel-admin上传图片到oss的方法
Oct 13 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 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下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP+redis实现微博的拉模型案例详解
2019/07/10 PHP
锋利的jQuery 要点归纳(一) jQuery选择器
2010/03/21 Javascript
有道JavaScript监听浏览器的问题
2010/06/23 Javascript
javascript获取浏览器类型和版本的方法(js获取浏览器版本)
2014/03/13 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jquery实现简单的二级导航下拉菜单效果
2015/09/07 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
js创建数组的简单方法
2016/07/27 Javascript
jQuery返回定位插件详解
2017/05/15 jQuery
jQuery实现可兼容IE6的遮罩功能详解
2017/09/19 jQuery
vue init失败简单解决方法(终极版)
2017/12/22 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
vue拖拽排序插件vuedraggable使用方法详解
2020/08/21 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
[02:41]DOTA2英雄基础教程 冥魂大帝
2014/01/16 DOTA
ssh批量登录并执行命令的python实现代码
2012/05/25 Python
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python实现的弹球小游戏示例
2017/08/01 Python
Python中XlsxWriter模块简介与用法分析
2018/04/24 Python
python3 判断列表是一个空列表的方法
2018/05/04 Python
python输出第n个默尼森数的实现示例
2020/03/08 Python
python 基于selectors库实现文件上传与下载
2020/12/31 Python
JD Sports意大利:英国篮球和运动时尚的领导者
2017/10/29 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
期末评语大全
2014/05/04 职场文书
干部鉴定材料
2014/05/18 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
2016秋季运动会开幕词
2016/03/04 职场文书
2016年社区文体活动总结
2016/04/06 职场文书
html中显示特殊符号(附带特殊字符对应表)
2021/06/21 HTML / CSS
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
排查并解决Oracle sysaux表空间异常增长
2022/04/20 Oracle