PHP 程序员:PHP fopen 读取带中文 URL 地址的一点
见解
之前喜欢用
fopen
()函数跨域读取图片或其它文件,一直都没发现什么问题。我所用的 PHP
版本都是 5 的了,应该不会有 CRLF Injection 攻击危险吧
但昨天在读取一张图片的时候出问题了,后来发现是 URL
里带中文字符。
例如下面这种情况:
代码如下:
$files
=
fopen
('我的 PP.jpg', 'rb');
“
那
$files
”
“
的返回值将会是 False”。首先我想到的是将 URL 用 urlencode 编码一下,发现还
是不行,原来 urlencode
“
会把 :” “
、 /”字符也编码了,那 URL 就不是 URL 了。呵,说得有些
“
绕口,那就把 :” “
、 /”
字符的编码替换回来就应该行的。
复制代码 代码如下:
$url
= '我的 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 是可以修改流的行为的一套选项。