WordPress 自动转换上传的中文文件名为英文


本文中介绍的功能已集成的
Wenprise Pinyin Slug 插件中,安装启用插件即可

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

完成了上面的步骤后,再次上传文件的时候,如果文件名是英文或数字,文件名会保持原样,如果文件名是中文,就会被自动转换为英文字符串。如果,在更换主机的时候,就避免了文件乱码的问题。

  • 分享:
评论
还没有评论
    发表评论 说点什么