WORDPRESS ATTACHMENT TITLE ISSUE
WordPress 的整个发展过程支援 163种语系 ,其中经常维护的都有72种语系之多。当然繁体中文在很多志工的贡献服务下,也成为其中很重要的一支语系。不过关于核心程式的变动,偶而还是会造成其他非英语系的系统有一些使用上的错误。在经历几次资料库乱码的灾难后,个人的使用习惯是将文章代称改成英文,另外也将上传的媒体档案名称避开以中文方式命名,简化对于系统程式字元编码的依赖。而最近听到朋友反应,原本中文档名附件支援好好的,好像在最新的版本又发生标题出现乱码的现象(图一),虽然这个附件的标题还是可以自行修改成正确的中文说明,不过对于一次需要上传很多附件档案的朋友,还是造成了一些小小的困扰。接着就跟大家分享一下官网上官于这个程式 bug的解决方法,有需要的朋友也可以参考一下。
中文档名附件标题乱码解决方法
检视了一下官网上的Trac Ticket Reports,这个中文副档名标题乱码的Bug问题应该会在4.6.2版获得修正,如果等不及需要先修改的话,可以参考一下#37989 上有人提出的解决方法来修改/wp-admin/includes/media.php 档案,以下是米粒在线另外一个方法是编辑主题的函数文件functions.php档案。
使用文字编辑器编辑主题的函数 functions.php 档案,请填入以下语法。
function wp37989_fix_encoded_attachment_titles( $data ) {
if ( empty( $_FILES ) ) {
return $data;
}
$file = current( $_FILES );
$ext = pathinfo( $file['name'], PATHINFO_EXTENSION );
$name = wp_basename( $file['name'], ".$ext" );
$data['post_title'] = sanitize_text_field( $name );
return $data;
}
add_filter( 'wp_insert_attachment_data', 'wp37989_fix_encoded_attachment_titles' );
//假如上段函数添加后上传还是乱码的话,那么再增加以下函数即可解决。(成功的话忽略以下函数)
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('/[\x{4E00}-\x{9FA5}]/u', $filename)){
$filename = md5($filename);
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_file', 5,1);
语法编辑完成以后请上传到到主题文件夹下,这时再上传中文档名附件时,可以看到标题恢复正常的中文显示了(图二)。
(图一)中文档名附件标题乱码
(图二)中文档名附件标题乱码修正完成
总结
在做网站管理时常常会遇到系统程式升级或者是主题/外挂程式等等的升级,并不一定每一次的升级都可以保证我们的网站运作正确。不过基于网站安全与正常运作的最基本原则下,确实的做好网站管理是每一位网站管理者的职责。很高兴在 WordPress 有非常多的志工,随时提供关于程式漏洞或是 Bug的修正程式,让我们可以安心又安全的维持网站运作,这应该又是一个让人不得不爱上 WordPress的原因吧。
2017年9月27日 下午2:31 1F
还有个办法解决,就是如果是虚拟主机,看是否支持URL编码设置。如果有的话,设置改为UTF-8或者GBK解决。