维基百科(或一般的MediaWiki)如何在URI中编码页面标题?这不是正常的URI编码,因为空格被下划线替代,双引号不会被编码,而是类似的东西。维基百科(MediaWiki)URI编码方案
回答
http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_%28technical_restrictions%29 - 在这里,您已经对他们的引擎在文章名称上执行的操作进行了某种描述。
他们应该在LocalSettings.php中有这样的内容: $ wgArticlePath ='/ wiki/$ 1';
和正确的服务器URI重写配置 - 它们似乎使用Apache(HTTP标头),所以它可能是mod_rewrite。 http://www.mediawiki.org/wiki/Manual:Short_URL
您也可以参考index.php文件的维基百科上的文章是这样的:http://en.wikipedia.org/w/index.php?title=Foo%20bar
并获得由发动机重定向到http://en.wikipedia.org/wiki/Foo_bar
。在幕后,mod_rewrite将其转换为/index.php?title=Foo_bar。对于MediaWiki引擎来说,就像您访问http://en.wikipedia.org/w/index.php?title=Foo_bar
一样 - 此页面不会重定向您。
这个过程相当复杂,并不完全漂亮。您需要查看includes/Title.php
中的Title
类。您应该从newFromText
方法开始,但大部分逻辑都在secureAndSplit
方法中。
请注意(与MediaWiki一样)代码不会轻微分离。如果你想复制它,你需要提取逻辑,而不是简单地重新使用类。
的逻辑看起来是这样的:
- 解码字符引用(例如& eacute;)
- 转换空间,以强调
- 检查标题是否是一个命名空间的引用或wiki的
- 删除哈希碎片(例如
Apple#Name
- 删除禁止的字符
- 禁止子目录链接(例如
../directory/page
) - 禁止三重波浪序列(
~~~
)(出于某种原因) - 限制的大小为255个字节
- 首字母大写
而且,我认为我说得对引号不需要由原始用户编码 - 浏览器可以透明地处理它们。
我希望有帮助!
如何处理段名称([[Apple#Name] here],#Name_here位)...?你说'删除哈希碎片'就好像它们被忽略一样。 – 2013-02-26 03:42:15
“禁止三重代字符串序列(~~~)(出于某种原因)” - 三重代字符[已扩展](https://www.mediawiki.org/wiki/Help:Signatures)在页面保存中进行签名,因此它使感觉不允许他们在标题中(链接到这样的页面会很棘手或不可能)。 – leo 2014-12-15 10:57:53
- 1. 维基百科API
- 2. NLP使用维基百科(java编程)
- 3. 维基百科样式列表编辑
- 4. 添加到维基百科的代码?
- 5. MediaWiki查询和/或WikidataQuery查找维基百科文章
- 6. 如何将维基百科数据集成到本地mediawiki?
- 7. 维基百科/ MediaWiki搜索API→查询网址
- 8. 使用MediaWiki API获取维基百科数学表达式
- 9. 维基百科与Python
- 10. 脚本从维基百科
- 11. 迭代维基百科
- 12. 维基百科第一段
- 13. 维基百科解析器
- 14. 寻找从维基百科
- 15. 提取维基百科
- 16. lucene维基百科查询
- 17. 维基百科地理编码API弃用/停用?
- 18. 忽略维基百科维护类别
- 19. 维基百科:Java库删除维基百科文本标记删除
- 20. PHP +维基百科:从维基百科文章的第一段获取内容?
- 21. 不如过滤维基百科的方式编辑
- 22. 基本的BeautifulSoup维基百科刮
- 23. 来自维基百科的一群人
- 24. 维基百科文本下载
- 25. 刮和解析维基百科页面
- 26. 使用维基百科的API继续
- 27. 维基百科消歧错误
- 28. Python维基百科API。计数函数
- 29. 维基百科长搜索描述
- 30. 使用维基百科消歧
我相信'mod_rewrite'不会将URL重写为'index.php?title = Foo_bar'。链接被重写(如果有的话)到索引。php/Foo_bar',然后通过$ _SERVER ['REQUEST_URI']'或类似的东西读取。 – lonesomeday 2010-10-08 20:52:10