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