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的原因吧。
1F
還有個辦法解決,就是如果是虛擬主機,看是否支持URL編碼設置。如果有的話,設置改為UTF-8或者GBK解決。