一个热爱网络的小学教师

WordPress中文附件文件名乱码的几个解决方法

继续折腾Wordpress,这次的问题是中文附件。Wordpress不支持中文文件名,如果上传的附件是中文文件名,就会显示乱码,导致附件不可用。解决这个问题的方法有很多,我这里总结一下。

1、修改系统文件:wp-admin/includes/file.php

搜索这一句:

return apply_filters( 'wp_handle_upload', array( 'file' => $new_file, 'url' => $url, 'type' => $type ), 'upload' );

修改为:

return apply_filters( 'wp_handle_upload', array( 'file' => $uploads['path'] . "/$filename", 'url' => $url, 'type' => $type ) , 'upload');

类似上面这种,还有一个修改file.php文件指定编码方式的方法,这里就不在列出了,不同的版本file.php代码差异较大,4.2.2版本的Wordpress这个函数已经改掉了,这种照葫芦画瓢的修改方法已经无效。另外,我个人不建议这种修改方法,因为需要修改系统文件,二Wordpress又是经常升级的,每升级一次就要重新修改一次,很麻烦。

2、修改主题的function.php文件

推荐这种修改方法,因为我们一旦选定一个主题,轻易是不会更换的,所以尽管Wordpress经常升级,却一般影响不到我们的主题。
常用的方法有MD5法和上传时间重命名法。

下面举个MD5法的例子,将这段代码添加到主题的function.php文件中:

function upload_file($filename) {
$parts = explode('.', $filename);
$filename = array_shift($parts);
$extension = array_pop($parts);
foreach ( (array) $parts as $part)
$filename .= '.' . $part;
if(preg_match('/[一-龥]/u', $filename)){
$filename = md5($filename);
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_file', 5,1);

只要上传的文件名中包含中文,就自动用MD5值重命名这个文件,而英文文件名则保持原状。这种方法可以完美解决中文附件乱码的问题,但不足之处是MD5值太长了,所以在此代码的基础上又有截取前若干个字符的变通方法,代码大家自行寻找就是。另外,我觉得这种方法还有个缺点,需要先计算MD5值才能重命名,多多少少会占用系统资源,不够“绿色”。

下面推荐上传时间重命名法,将下面代码添加到主题的function.php文件中:

function mayicun_wp_handle_upload_prefilter($file){ $time=date("Ymdhis"); $file['name'] = $time."".mt_rand(1,100).".".pathinfo($file['name'] , PATHINFO_EXTENSION); return $file; } add_filter('wp_handle_upload_prefilter', 'mayicun_wp_handle_upload_prefilter');

不管上传什么附件,一律重命名为日期时间+随机字符,无需计算MD5,所有文件名都用同一种命名方式,简直是强迫症福音啊,呵呵。

未经允许不得转载:高海鹏老师的博客 » WordPress中文附件文件名乱码的几个解决方法

分享到:更多 ()

评论 抢沙发

Protected by WP Anti Spam

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
点击这里给我发消息