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

本文详细介绍了如何解决MediaWiki在Windows环境下无法上传含有中文名称文件的问题,通过修改四个核心文件的编码处理方式,确保了中文文件名的正确识别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

解决MediaWiki上传中文文件名导致的乱码问题,需要从文件系统编码和MediaWiki配置两个方面入手。首先,确保服务器文件系统支持UTF-8编码,这是处理中文文件名的基本要求。接着,在MediaWiki中,需要对文件上传路径进行UTF-8编码转换,以确保文件名的正确存储和显示。 参考资源链接:[MediaWiki配置全攻略:从上传功能到异常解决](https://wenku.youkuaiyun.com/doc/3oirfdx0vd?spm=1055.2569.3001.10343) 具体操作步骤如下: 1. 在`LocalSettings.php`文件中设置上传功能以及文件扩展名,确保上传功能已启用并且指定了允许的文件类型: ``` $wgEnableUploads = true; $wgFileExtensions = array('png', 'gif', 'jpg', 'jpeg', 'pdf', 'txt', 'doc', 'xls', 'ppt', 'rar', 'zip'); ``` 2. 修改文件上传处理脚本`FSRepo.php`,在适当位置添加代码以转换文件路径为UTF-8编码。例如,在`FS***`函数中添加: ``` $path = wfEncodePath( $path ); ``` 同样的处理需要在`FS***`和`FS***`函数中也进行添加,以保证在文件上传过程中的路径处理是一致的。 3. 确保上传目录具有正确的文件系统权限,以便MediaWiki可以写入文件。 4. 重启MediaWiki服务,使配置生效。 通过上述步骤,可以在MediaWiki中配置上传功能,以支持中文文件名文件上传并避免乱码问题。如果在操作过程中遇到任何问题,可以参考《MediaWiki配置全攻略:从上传功能到异常解决》一书中的详细讲解和解决方案,这本书不仅涉及了文件上传和乱码问题的解决,还包括了其他多种常见问题的处理,是MediaWiki配置与维护的实用指南。 参考资源链接:[MediaWiki配置全攻略:从上传功能到异常解决](https://wenku.youkuaiyun.com/doc/3oirfdx0vd?spm=1055.2569.3001.10343)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值