北极寒流 » 网络资源 » WordPress上传中文名称文件自动重命名的方法 - 2015.08.12

WordPress上传中文名称文件自动重命名的方法

大多数开源程序在上传附件时都会自动重命名文件为随机字母、数字串,而WordPress不会这样做,这并不是WordPress的错,WordPress更多的考虑了SEO,对于中文名称的文件,我们可以自行添加代码解决。

对于Linux主机,如果上传包含中文名称的文件,就会变成乱码而带来许多麻烦,之前我就遇到过网站大量附件名称包含中文而导致无法备份。

即使你的主机做了一些处理,能够支持中文名称文件,或你使用的是Windows系统的主机,也不应该给文件使用中文名称,毕竟中文编程成为主流目前还只是一种幻想。

出于SEO考虑,有时我们需要带有关键词的文件名,如果被重命名为随机字符串,那就没有任何意义了。

所以我改进了一下代码,实现在文件名包含字母、数字、连接符、下划线之外的字符的情况下,才重命名为15个字符长度的名称,符合要求的文件名称将不作任何修改,这样就保证了我们刻意设置的对SEO友好的文件名称不会被破坏,而不小心上传的会变乱码的文件名称将被md5编码并截取为15个字符。

把以下代码扔到functions.php文件中:

function new_filename($filename) {
$info = pathinfo($filename);
$ext = empty($info['extension']) ? " : '.' . $info['extension'];
$name = basename($filename, $ext);
if ( !preg_match('/^[0-9a-zA-Z_-]+$/', $name) )
$name = substr(md5($name), 0, 15);
return $name . $ext;
}
add_filter('sanitize_file_name', 'new_filename', 10);

好了!现在你就可以下上传中文名称文件。

使用下面的代码也可以(也是丢functions.php文件中)

//自动改图片文件名称

function huilang_wp_handle_upload_prefilter($file){

$time=date("Y-m-d");

$file['name'] = $time."".mt_rand(1,100).".".pathinfo($file['name'] , PATHINFO_EXTENSION);

return $file;

}

add_filter('wp_handle_upload_prefilter', 'huilang_wp_handle_upload_prefilter');

这样做的好处会很多:主机不支持中文名称,那么会导致上传的图片不会正常显示在用户的浏览器上;ftp下载的中文图片名称的时候乱码,如果你是备份到本地然后恢复的时候,那么图片就都坏了。

备注:上面是改名称为年月日+随机数字,要想加上时分秒,修改第三行 $time=date("Y-m-d"); 为 $time=date("Y-m-d H:i:s"); 即可

发表评论 【登录·注册】

所有留言都会被审核,请勿发布垃圾评论!

(必填)*