我在 Windows 7 下的本地机器上运行 Apache/PHP/MySQL 服务器 (xampp)。在那里我安装了 MediaWiki-Software 以及许多扩展。我的目标是从维基百科下载一些页面并在本地显示。一切运行良好,除了一个大问题:
德语 Wikipedia 中的图像文件的文件名中包含德语变音符号(ä、ö、ü)。这无法更改,因为文章链接到带有元音变音的名称。
当我尝试导入这些图像(通过maintenance/importImages.php
脚本)时,它不起作用。我跟踪了代码并找出了原因:
当 PHP 扫描目录中的文件时,它会将文件名读取为 ANSI 字符串。MediaWiki 内部要求所有字符串都是 utf-8。因此,文件名中的元音变音符号被解释为(不存在的)unicode 字符的一部分,这会破坏脚本。
如果我手动将调用添加utf8_encode()
到脚本中,那么该名称就可以了,并且已正确添加到数据库中。但是实际写入“images”目录的文件有一个损坏的名称 - 两个特殊字符而不是变音符号。原因是 PHP 脚本将 utf-8 字符串发送到文件系统函数(“copy”,...),但操作系统需要 ANSI 字符串。我可以在每个文件系统调用之前手动添加一个调用utf8_decode()
,但是有成千上万个!
再次简而言之:操作系统在 ANSI 中工作(这对于 windows 来说不容易更改),PHP 服务器内的 MediaWiki 软件在 utf-8 中工作(也不能更改)。有没有办法在文件名字符串每次进出 PHP 服务器时自动编码/解码?
我已经在玩mb_internal_encoding()
and了mb_http_output()
,但这并没有改变任何东西:MediaWiki 使用仅适用于 utf-8 字符串的硬编码函数。