很多 WordPress 主機(jī)都是 Linux 系統(tǒng)的,上傳的文件名為中文的時(shí)候就會(huì)遇到文件編碼的問(wèn)題,導(dǎo)致圖片不能上傳或者上傳的圖片顯示不出來(lái),這種情況最容易在 WordPress 換主機(jī)搬家的時(shí)候出現(xiàn),文件明明是有的,可是文件名變成了誰(shuí)也不認(rèn)識(shí)的亂碼。
出現(xiàn)這種情況的原因是 Windows 系統(tǒng)下,文件名稱的編碼為 GBK,而在 Linux 服務(wù)器上,文件名的編碼為 UTF-8 的,而英文在 GBK 和 UTF-8 都會(huì)正常顯示。知道了原因,我們也就找出了解決辦法,在上傳的時(shí)候判斷一下文件名,如果是中文,就自動(dòng)把文件的 MD5 作為文件名,英文則保持不變。
function upload_media($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 = substr(md5($filename), 0, 8); //把文件的md5值的前8位作為文件名
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_media', 5,1);
把以上代碼加入到WordPress主題的 functions.php 中即可。
完成了上面的步驟后,再次上傳文件的時(shí)候,如果文件名是英文或數(shù)字,文件名會(huì)保持原樣,如果文件名是中文,就會(huì)被自動(dòng)轉(zhuǎn)換為英文字符串。如果,在更換主機(jī)的時(shí)候,就避免了文件亂碼的問(wèn)題。


