解决mediawiki上传文件文件名是中文上传失败

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gui66497/article/details/82496914

公司内部的wiki是用的mediawiki,其它都还好就是上传文件时文件名中有中文就不能上传,这次下决心要修复这个问题,一开始我还以为是哪里需要配置一下,然后搜了半天发现这是一个官方的bug:

好吧,是官方bug也好,官方肯定也提供了解决方案,链接在这,找了半天确实有人给出了详细的解决方案:

注意我标红的几个地方,就是说要改四个地方,然后注意用中文的编码集(中文的就是GBK,不要去百度了),而不是他示例的windows-1255,好了废话不多说,我把这四个地方改完重新用中文描述下:


1.找到MediaWiki/includes/upload/UploadBase.php文件,搜索WINDOWS_NONASCII_FILENAME,将这一段if else代码整个注释

2.找到MediaWiki/includes/filebackend/ FSFileBackend.php,搜索 doStoreInternal方法,将下面一段代码加到$ok = copy( $params['src'], $dest );之前:

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
{
    $charSetArr = array("ASCII", "JIS", "EUC-JP", "UTF-8", "UTF-16","windows-1251","ISO-8859-1", "GBK");
    if (mb_detect_encoding($dest, $charSetArr) =="UTF-8")
    {
        $dest = iconv("UTF-8", "GBK", $dest);
    }
}

3.找到MediaWiki\includes\filerepo\file\File.php,搜索transform方法,将下面一段代码加到$thumbPath = $this->getThumbPath( $thumbName ); // final thumb path 之后:

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
{
    $charSetArr = array("ASCII", "JIS", "EUC-JP", "UTF-8", "UTF-16","windows-1251","ISO-8859-1", "GBK");
    if (mb_detect_encoding($thumbPath, $charSetArr) =="UTF-8")
    {
        $thumbPath = iconv("UTF-8", "GBK", $thumbPath);
    }
}

4.找到 MediaWiki\includes\media\Bitmap.php,搜索transformGd方法,将下面一段代码加到if ( !file_exists( $params['srcPath'] ) ) 之前:

if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')
{
    $charSetArr = array("ASCII", "JIS", "EUC-JP", "UTF-8", "UTF-16","windows-1251","ISO-8859-1", "GBK");
    if (mb_detect_encoding($params['srcPath'], $charSetArr) =="UTF-8")
    {
        $params['srcPath'] = iconv("UTF-8", "GBK", $params['srcPath']);
    }
}

好了,到此大功告成,我这里使用的版本是1.30,其它版本应该也差不多,不过据说官方版本1.31已经解决了这个bug了,重新下的话也就没这个烦恼了。。

猜你喜欢

转载自blog.csdn.net/gui66497/article/details/82496914
今日推荐