很多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中即可。