在使用wordpress 4.9.4时,发现他没法上传中文命名的附件,
这主要是因为php使用utf-8编码,而在保存文件时又没有考虑到与操作系统的编码方式兼容造成的。
国内使用的操作系统的编码一般都是GB2312和GBK,两者是兼容的。
wordpress中处理上传附件的原始代码是:
` 1. //file: "wordpress/wp-admin/includes/file.php" line:311
- $new_file = $uploads['path'] . "/$filename";
这里需要将文件名转换为GBK编码:
用以下语句进行替换:
$new_file = $uploads['path'] . "/" . iconv("UTF8", "GBK", $filename);
这个$new_file变量在后面还会被存储于数据库的wp_postmeta表中:
return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ) );
而存入数据库的编码应该是utf-8的,因此不能直接使用$new_file变量:
用以下语句进行替换:
return apply_filters( 'wp_handle_upload', array( 'file' => $uploads['path'] . "/$filename", 'url' => $url, 'type' => $type ) );
这样就解决了Wordpress中文名附件的上传问题
第二种自动改名的方法:
首先到WordPress目录下找到wp-admin/includes/file.php这个文件。在wp-admin/includes/file.php文件中查找
$new_file = $uploads['path'] . "/$filename";
1
替换成下面的:
$new_file = $uploads['path'] . "/".date("YmdHis").floor(microtime()*1000).".".$ext;
1
这样就可以实现wordpress上传图片自动重命名了。
以上代码意思就是,上传文件就会以“年月日时分秒+千位毫秒整数”的格式重命名文件。这就再也不用担心图片文件名相同而覆盖了原文件。