zl程序教程

您现在的位置是:首页 >  其他

当前栏目

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

中文地址 读取 url 一点 见解
2023-06-13 09:14:35 时间
但昨天在读取一张图片的时候出问题了,后来发现是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标记是等价的。
此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。 "x+" 创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则fopen()调用失败并返回FALSE,并生成一条E_WARNING级别的错误信息。如果文件不存在则尝试创建之。
这和给底层的open(2)系统调用指定O_EXCL|O_CREAT标记是等价的。
此选项被PHP4.3.2以及以后的版本所支持,仅能用于本地文件。