維基百科(或一般的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