加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP fopen 读取带中文URL地址的一点见解

发布时间:2020-12-13 06:10:48 所属栏目:PHP教程 来源:网络整理
导读:但昨天在读取一张图片的时候出问题了,后来发现是URL里带中文字符。 例如下面这种情况: div class="codetitle" a style="CURSOR: pointer" data="21416" class="copybut" id="copybut21416" onclick="doCopy('code21416')" 代码如下: div class="codebody"

但昨天在读取一张图片的时候出问题了,后来发现是URL里带中文字符。 例如下面这种情况:
<div class="codetitle"><a style="CURSOR: pointer" data="21416" class="copybut" id="copybut21416" onclick="doCopy('code21416')"> 代码如下:<div class="codebody" id="code21416">
$files = fopen('http://www.website.com/我的PP.jpg','rb');

那“$files”的返回值将会是“False”。首先我想到的是将URL用urlencode编码一下,发现还是不行,原来urlencode会把“:”、“/”字符也编码了,那URL就不是URL了。呵,说得有些绕口,那就把“:”、“/”字符的编码替换回来就应该行的。
<div class="codetitle"><a style="CURSOR: pointer" data="13130" class="copybut" id="copybut13130" onclick="doCopy('code13130')"> 代码如下:<div class="codebody" id="code13130">
$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。

一、语法:

<div class="codetitle"><a style="CURSOR: pointer" data="91104" class="copybut" id="copybut91104" onclick="doCopy('code91104')"> 代码如下:<div class="codebody" id="code91104">fopen(filename,mode,include_path,context)

规定要打开的文件或 URL。
规定要求到该文件/流的访问类型。可能的值见下表。
如果也需要在 include_path 中检索文件的话,可以将该参数设为 1 或 TRUE。
规定文件句柄的环境。Context 是可以修改流的行为的一套选项。

二、mode 参数的可能的值:

只读方式打开,将文件指针指向文件头。
读写方式打开,将文件指针指向文件头。
写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。
创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。
此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读