Wordpress中文名附件上传问题的解决方案

在使用wordpress 4.9.4时,发现他没法上传中文命名的附件,

这主要是因为php使用utf-8编码,而在保存文件时又没有考虑到与操作系统的编码方式兼容造成的。

国内使用的操作系统的编码一般都是GB2312和GBK,两者是兼容的。

wordpress中处理上传附件的原始代码是:

` 1. //file: "wordpress/wp-admin/includes/file.php" line:311

  1. $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中文名附件的上传问题

参考:http://hjin.me/code/640/

第二种自动改名的方法:

首先到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上传图片自动重命名了。
以上代码意思就是,上传文件就会以“年月日时分秒+千位毫秒整数”的格式重命名文件。这就再也不用担心图片文件名相同而覆盖了原文件。

你可能感兴趣的:(Wordpress中文名附件上传问题的解决方案)