停止 MediaWiki 编码节锚中的括号

Stop MediaWiki encoding parentheses in section anchors

我最近在 HostGator-hosted 服务器上安装了 MediaWiki 1.23.9(我相信 Apache-based)。我把它全部配置好了,得到了漂亮的 URL 和 运行,得到了动作 URls 也正确地重写了,一切都很好。然而,我注意到锚链接,特别是 auto-generated 部分 headers,并不是那么漂亮。由于某种原因,他们经历了 "dot encoding",我不是 100% 确定。

这导致 /w/MyPage#Section_1_(Stuff_Here) 变为 /w/MyPage#Section_1_.28Stuff_Here.29

括号是有效的 URI 字符(事实上,如果在页面标题中使用,它们不会在 URI 中正确编码),我不明白为什么会发生这种情况,也不知道如何阻止它。我查看了各种错误报告,甚至尝试浏览了 MediaWiki 源代码。我找到了执行编码的函数,但据我所知,括号不应该被编码。

我的问题是:有没有办法阻止 MediaWiki 对 header 节中的括号进行编码?如果做不到这一点,我可以使用 .htaccess 规则来掩盖这种行为吗?作为参考,我当前的 .htaccess 文件在下面,尽管我更愿意将其关闭而不是屏蔽它。

RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^(.*)$ %{DOCUMENT_ROOT}/w/index.php [L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?w/images/thumb/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/w/thumb.php?f=&width= [L,QSA,B]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-f
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} !-d
RewriteRule ^/?w/images/thumb/archive/[0-9a-f]/[0-9a-f][0-9a-f]/([^/]+)/([0-9]+)px-.*$ %{DOCUMENT_ROOT}/w/thumb.php?f=&width=&archived=1 [L,QSA,B]

注意: This answer to a different question 提供了对 "dot encoding" 过程是什么的快速解释,但没有说明如何从中排除括号。

MediaWiki 对部分 ID 进行编码以将 HTML4 restrictions. This is a relic of the past as MediaWiki uses HTML5 these days, which removed those restrictions. You can set $wgExperimentalHtmlIds 设为 true 以使 MediaWiki 遵循 HTML5 规则(仅需要转换空格)。

之所以称为 "experimental",是因为当时(该设置于 2010 年引入)浏览器对 HTML5 的支持有些不可靠。今天这可能没问题,但没有人实际测试过,所以使用它需要您自担风险。