上传带有国际字符的图片时出现BUG?

时间:2013-02-17 作者:vicmarto

为什么当我上传一张带有国际字符的图片,比如:ábc。jpg到WordPress,文件名显示为:bc。jpg?

相反,它的标题和URL是正确的。请查看此屏幕截图:http://d.pr/i/1oFG

这是虫子吗?

附言:请注意,这种行为只发生在国际字符是其名称第一个字母的图像上,而不是出现在名称中间的图像上。

1 个回复
SO网友:Simon

这有点奇怪,我无法再现你的错误。也许这与您上载的文件名/文件系统的不同字符编码有关。处理文件上传时,WordPress会清理文件名以删除空格和其他一些不需要的字符。该消毒由以下人员执行sanitize_file_name 上载完成时。第一部分(和整体)如下所示:

$filename_raw = $filename;
$special_chars = array("?", "[", "]", "/", "\\\\", "=", "<", ">", ":", ";", ",", "\'", "\\"", "&", "$", "#", "*", "(", ")", "|", "~", "`", "!", "{", "}", chr(0));
$special_chars = apply_filters(\'sanitize_file_name_chars\', $special_chars, $filename_raw);
$filename = str_replace($special_chars, \'\', $filename);
$filename = preg_replace(\'/[\\s-]+/\', \'-\', $filename);
$filename = trim($filename, \'.-_\');
正如您所看到的阵列$special_chars 包含严肃的口音,但不包含尖锐的口音。我看不出为什么这个代码会过滤掉á 字符(除非您安装了一些连接到sanitize_file_name_charssanitize_file_name). 我可以想象á有不止一个unicode表示形式(例如瑞典字符åäö),或者您正在上载的文件名是使用ISO-8859-1编码的,因此请尝试隔离您的案例中使用的文件名,如果可能的话,尝试上载几个不同编码的文件名。此外,尝试将此问题与服务器或客户端问题隔离开来,即将同一文件上载到不同的服务器,以了解其在不同系统中的行为是否相同。This image, 例如,在OS X/MAMP上运行的我的clean WP安装中,上传就可以了。

结束