rawurlencode()的奇怪行为...如何让它工作?
我在我的PHP项目中发现了一件非常烦人的事情。 我的网页可以存储文件,然后让用户下载/显示它们。 为此,我已经建立了URL链接(模型类处理文件名并提供它,这里的所有作品)
但是对于文件来说,它们的名字带有问题,尤其是空格和特殊字符(这在网站的语言中很常见)。 我的系统通过单击链接提供文件名称(下载脚本杀死所有的盗链尝试,因此只有可点击的链接才能完成这项工作)。
所以我遇到了处理这些特殊文件名称的问题。 我知道我想用的rawurlencode()
函数,但它的行为真的很奇怪。 这里是我的代码:(我在foreach
循环中为所有文件,所以有$key
,但我会显示一个索引)。
echo $this->files[$key];
//shows name of file: a č o.png
echo rawurlencode($this->files[$key]);
//shows translated name: a%20%C4%8D%20o.png
echo URL;
//gives (yes, it is local XAMPP test server) : http://127.0.0.1/
echo '<a href="' . URL . 'file/show/' . $this->files[$key] . '" target="_blank"> Show file </a>';
// gives link leading to: 127.0.0.1/file/show/a č o.png
这是预料之中的,但我没有得到:
echo '<a href="' . URL . 'file/show/' . rawurlencode($this->files[$key]) . '" target="_blank"> Show file </a>';
//gives link leading to: 127.0.0.1/file%2Fshow%2Fa č o.png
$address = rawurlencode($this->files[$key]);
echo '<a href="' . URL . 'file/show/' . $address . '" target="_blank"> Show file </a>';
//gives link leading to: 127.0.0.1/file/show/a č o.png
这些编码只是忽略spaces&special
字符ěščřžýáíéä
等...我的问题是...我做错了什么,为什么有时这个功能有效,有时不会? 为什么在$value
存储会擦除编码,或者该函数在echo中不起作用,除非它在回声中单独存在?
锚标签有问题吗? 因为即使这样:
echo '<a href="' . URL . 'file/show/';
echo rawurlencode($this->files[$key]);
echo '" target="_blank"> Show file </a>';
//gives link leading to: 127.0.0.1/file/show/a č o.png
再次,没有空格和字符翻译。 我的系统是否闹鬼或任何人有线索?
我也试过urlencode()
,那个翻译的空格+如预期的那样,但是它也无法处理所有的特殊字符。 还有其他功能吗?
我为所有的东西使用UTF-8。
链接地址: http://www.djcxy.com/p/57951.html上一篇: Strange behaviour of rawurlencode() ...how to get it to work?