最近刚发现自己通过 wordpress 后台上传的图片附件名称中文乱码,这是上传后出现的问题,直接导致前台图片不能正常显示,好郁闷的乱码啊,因为一直在使用 360 浏览器,这些乱码后的图片居然能够正常显示,算了,先把乱码的情况解决了再说吧。,如果是上传本地的图片,而图片的名称是中文的话,wordpress 就会按照图片中文名称进行存储,这也导致图片容易乱码的原因了,所以我们要自动转换这个中文名称,这样就需要在主题上传图片的时候,先要判断是否为中文名称存储,如果是的话,就转换成拼音或者 md5 或者其它来存储名。,下面是一段判断如果是中文文件名则会自动转换成 MD5 的代码,代码如下:,同样的将本代码放入到主题 functions.php 文件中即可,这种方法是将中文进行了 md5 的处理,会将中文图片附件的名称变成一串 md5 后的代码串,如果对名称要求不是很严格的话,直接使用这种方法就可以了。,如果想要中文文件名直接转换成拼音也是比较简单的,我的做法是在主题的根目录下建立一个 include 文件夹,里面新建一个转拼音的 php 类文件,命名为 to-pinyin.php,代码如下:,类的文件已经写好了,这个时候就需要在程序里面进行判断了,判断当然还是老样子,在主题 functions.php 里面进行判断就可以了,代码如下:,这个时候再去看一下,自己上传的图片附件是否已经转换成拼音名称了。,

最近刚发现自己通过 wordpress 后台上传的图片附件名称中文乱码,这是上传后出现的问题,直接导致前台图片不能正常显示,好郁闷的乱码啊,因为一直在使用 360 浏览器,这些乱码后的图片居然能够正常显示,算了,先把乱码的情况解决了再说吧。

如果是上传本地的图片,而图片的名称是中文的话,wordpress 就会按照图片中文名称进行存储,这也导致图片容易乱码的原因了,所以我们要自动转换这个中文名称,这样就需要在主题上传图片的时候,先要判断是否为中文名称存储,如果是的话,就转换成拼音或者 md5 或者其它来存储名。

下面是一段判断如果是中文文件名则会自动转换成 MD5 的代码,代码如下:

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);

同样的将本代码放入到主题 functions.php 文件中即可,这种方法是将中文进行了 md5 的处理,会将中文图片附件的名称变成一串 md5 后的代码串,如果对名称要求不是很严格的话,直接使用这种方法就可以了。

如果想要中文文件名直接转换成拼音也是比较简单的,我的做法是在主题的根目录下建立一个 include 文件夹,里面新建一个转拼音的 php 类文件,命名为 to-pinyin.php,代码如下:

='5.0') ? array_combine($_TDataKey, $_TDataValue) : $this->Arr_Combine($_TDataKey, $_TDataValue);
        arsort($_Data);
        reset($_Data);
        if($_Code != 'gb2312') $_String = $this->U2_Utf8_Gb($_String);
        $_Res = '';
        for($i=0; $i160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; }
            $_Res .= $this->Pinyins($_P, $_Data);
        }
        return $_Res;
        //return preg_replace("/[^a-z0-9]*/", '', $_Res);
    }
        
    function Pinyins($_Num, $_Data){
        if ($_Num>0 && $_Num<160 ) return chr($_Num);
            elseif($_Num<-20319 || $_Num>-10247) return '';
        else {
            foreach($_Data as $k=>$v){ if($v<=$_Num) break; }
            return $k;
        }
    }
    function U2_Utf8_Gb($_C){
        $_String = '';
        if($_C < 0x80){ 
            $_String .= $_C;
        }elseif($_C < 0x800){
            $_String .= chr(0xC0 | $_C>>6);
            $_String .= chr(0x80 | $_C & 0x3F);
        }elseif($_C < 0x10000){
            $_String .= chr(0xE0 | $_C>>12);
            $_String .= chr(0x80 | $_C>>6 & 0x3F);
            $_String .= chr(0x80 | $_C & 0x3F);
        }elseif($_C < 0x200000) {
            $_String .= chr(0xF0 | $_C>>18);
            $_String .= chr(0x80 | $_C>>12 & 0x3F);
            $_String .= chr(0x80 | $_C>>6 & 0x3F);
            $_String .= chr(0x80 | $_C & 0x3F);
        }
            return iconv('UTF-8', 'GB2312', $_String);
        }
    function Arr_Combine($_Arr1, $_Arr2){
        for($i=0; $i

类的文件已经写好了,这个时候就需要在程序里面进行判断了,判断当然还是老样子,在主题 functions.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('/[\x{4E00}-\x{9FA5}]/u', $filename)){
require('include/to-pinyin.php');
$filename = $pin->Pinyin($filename,'UTF8');
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_file', 5,1);

这个时候再去看一下,自己上传的图片附件是否已经转换成拼音名称了。

,

最近刚发现自己通过 wordpress 后台上传的图片附件名称中文乱码,这是上传后出现的问题,直接导致前台图片不能正常显示,好郁闷的乱码啊,因为一直在使用 360 浏览器,这些乱码后的图片居然能够正常显示,算了,先把乱码的情况解决了再说吧。

如果是上传本地的图片,而图片的名称是中文的话,wordpress 就会按照图片中文名称进行存储,这也导致图片容易乱码的原因了,所以我们要自动转换这个中文名称,这样就需要在主题上传图片的时候,先要判断是否为中文名称存储,如果是的话,就转换成拼音或者 md5 或者其它来存储名。

下面是一段判断如果是中文文件名则会自动转换成 MD5 的代码,代码如下:

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);

同样的将本代码放入到主题 functions.php 文件中即可,这种方法是将中文进行了 md5 的处理,会将中文图片附件的名称变成一串 md5 后的代码串,如果对名称要求不是很严格的话,直接使用这种方法就可以了。

如果想要中文文件名直接转换成拼音也是比较简单的,我的做法是在主题的根目录下建立一个 include 文件夹,里面新建一个转拼音的 php 类文件,命名为 to-pinyin.php,代码如下:

='5.0') ? array_combine($_TDataKey, $_TDataValue) : $this->Arr_Combine($_TDataKey, $_TDataValue);
        arsort($_Data);
        reset($_Data);
        if($_Code != 'gb2312') $_String = $this->U2_Utf8_Gb($_String);
        $_Res = '';
        for($i=0; $i160) { $_Q = ord(substr($_String, ++$i, 1)); $_P = $_P*256 + $_Q - 65536; }
            $_Res .= $this->Pinyins($_P, $_Data);
        }
        return $_Res;
        //return preg_replace("/[^a-z0-9]*/", '', $_Res);
    }
        
    function Pinyins($_Num, $_Data){
        if ($_Num>0 && $_Num<160 ) return chr($_Num);
            elseif($_Num<-20319 || $_Num>-10247) return '';
        else {
            foreach($_Data as $k=>$v){ if($v<=$_Num) break; }
            return $k;
        }
    }
    function U2_Utf8_Gb($_C){
        $_String = '';
        if($_C < 0x80){ 
            $_String .= $_C;
        }elseif($_C < 0x800){
            $_String .= chr(0xC0 | $_C>>6);
            $_String .= chr(0x80 | $_C & 0x3F);
        }elseif($_C < 0x10000){
            $_String .= chr(0xE0 | $_C>>12);
            $_String .= chr(0x80 | $_C>>6 & 0x3F);
            $_String .= chr(0x80 | $_C & 0x3F);
        }elseif($_C < 0x200000) {
            $_String .= chr(0xF0 | $_C>>18);
            $_String .= chr(0x80 | $_C>>12 & 0x3F);
            $_String .= chr(0x80 | $_C>>6 & 0x3F);
            $_String .= chr(0x80 | $_C & 0x3F);
        }
            return iconv('UTF-8', 'GB2312', $_String);
        }
    function Arr_Combine($_Arr1, $_Arr2){
        for($i=0; $i

类的文件已经写好了,这个时候就需要在程序里面进行判断了,判断当然还是老样子,在主题 functions.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('/[\x{4E00}-\x{9FA5}]/u', $filename)){
require('include/to-pinyin.php');
$filename = $pin->Pinyin($filename,'UTF8');
}
$filename .= '.' . $extension;
return $filename ;
}
add_filter('sanitize_file_name', 'upload_file', 5,1);

这个时候再去看一下,自己上传的图片附件是否已经转换成拼音名称了。

最后修改:2025 年 09 月 10 日
如果觉得我的文章对你有用,请随意夸赞