很多WordPress主机都是Linux系统的,上传的文件名为中文的时候就会遇到文件编码的问题,导致图片不能上传或者上传的图片显示不出来,这种情况最容易在WordPress换主机搬家的时候出现,文件明明是有的,可是文件名变成了谁也不认识的乱码。
出现这种情况的原因是Windows系统下,文件名称的编码为gbk,而在Linux服务器上,文件名的编码为utf-8的,而英文在gbk和utf-8都会正常显示。知道了原因,我们也就找出了解决办法,在上传的时候判断一下文件名,如果是中文,就自动把文件的md5作为文件名,英文则保持不变。
function upload_media($filename) {
$parts = explode('.', $filename);
$filename = array_shift($parts);
$extension = array_pop($parts);
foreach ( (array) $parts as $part)
$filename .= '.' . $part;
if(preg_match('/[\x{4e00}-\x{9fa5}]+/u', $filename)){ //判断文件名为中文
$filename = substr(md5($filename), 0, 8); //把文件的md5值的前8位作为文件名
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_media', 5,1);
把以上代码加入到WordPress主题的functions.php中即可。

