具有特殊字符的图像的Mediawiki URL

时间:2014-06-10 21:03:18

标签: php mediawiki

我知道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和相关类中探讨过,但我无法解开逻辑流程。

1 个答案:

答案 0 :(得分:1)

该文件名的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"