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

公司内部的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了,重新下的话也就没这个烦恼了。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值