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?

下一篇: path behaviour not working as expected