带有特殊字符的图片的Mediawiki URL


Mediawiki URL for images with special characters

我知道MediaWiki上传的图像是根据其文件名的md5和的前两个字符放置在子文件夹中的。这适用于我检查过的绝大多数文件,除了名称中有"特殊字符"(如变音符号)的文件,在这种情况下,名称的纯md5散列是不正确的。例如:

#!/usr/bin/env php
<?
echo "Hash prefix should be 11: "; // http://upload.wikimedia.org/wikivoyage/de/1/11/Basel_Straßenbahn-Anhänger_0165-ah.jpg
$name = "Basel_Straßenbahn-Anhänger_0165-ah.jpg";
echo substr(md5(urlencode($name)), 0, 2) . "'n"; // hash is actually 1c!
?>

我已经尝试过使用和不使用urlencode调用名称来转义字符。有人知道在运行哈希之前,对这些名称应用了什么额外的特殊规则吗?我在FileRepo.php和相关类中摸索了一下,但是我无法理清逻辑流。

该文件名的MD5和的第一个字节实际上是11:

sh% echo -n 'Basel_Straßenbahn-Anhänger_0165-ah.jpg' | md5
11cead5cf97b83d366f90d59a19f1f4f

如果您得到不同的东西,您的PHP文件可能没有使用UTF-8编码。尝试使用文件名的ASCII源代码表示:

"Basel_Stra'xc3'x9fenbahn-Anh'xc3'xa4nger_0165-ah.jpg"