Jak Wikipedia (lub MediaWiki w ogóle) koduje tytuły stron w URI? To nie jest normalne kodowanie URI, ponieważ spacje są zastępowane podkreśleniami, a podwójne cudzysłowy nie są kodowane i takie rzeczy.Wikipedia (MediaWiki) Kodowanie URI
Odpowiedz
http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_%28technical_restrictions%29 - tutaj masz jakiś opis tego, co ich silnik wymusza na nazwach artykułów.
Powinny mieć coś takiego w swoim LocalSettings.php: $ wgArticlePath = '/ wiki/$ 1';
i poprawna konfiguracja URI serwera - wydaje się, że używają Apache (nagłówek HTTP), więc prawdopodobnie jest to mod_rewrite. http://www.mediawiki.org/wiki/Manual:Short_URL
Możesz także odwołać się do pliku index.php, aby uzyskać artykuł na temat Wikipedii: http://en.wikipedia.org/w/index.php?title=Foo%20bar
i uzyskać przekierowanie przez silnik do http://en.wikipedia.org/wiki/Foo_bar
. Za kulisami mod_rewrite tłumaczy go na /index.php?title=Foo_bar. W przypadku silnika MediaWiki jest tak samo, jak w przypadku odwiedzin http://en.wikipedia.org/w/index.php?title=Foo_bar
- ta strona nie przekierowuje.
Proces jest dość skomplikowany i nie jest całkiem ładny. Musisz spojrzeć na klasę Title
znalezioną w includes/Title.php
. Powinieneś zacząć od metody newFromText
, ale większość logiki jest w metodzie secureAndSplit
.
Należy zauważyć, że (jak zawsze w przypadku MediaWiki) kod nie jest oderwany w najmniejszym stopniu. Jeśli chcesz go powielić, musisz wyodrębnić logikę, zamiast po prostu ponownie użyć tej klasy.
Logika wygląda mniej więcej tak:
- referencje znakowe Decode (np & eacute;)
- Konwersja obowiązuje do podkreślenia
- Sprawdź, czy tytuł jest nawiązaniem do nazw lub interwiki
- Usuń fragmenty haszujące (np.
Apple#Name
- Usuń niedozwolone znaki
- Nie zezwalaj na linki do podkatalogów (np.
../directory/page
) - zabraniajcie potrójne sekwencje tyldy (
~~~
) (z jakiegoś powodu) - ograniczenie wielkości 255 bajtów
- pierwszą literę
Ponadto uważam, że mam rację, mówiąc, że cudzysłowy nie muszą być zakodowane przez oryginalnego użytkownika - przeglądarki mogą obsługiwać je w sposób przezroczysty.
Mam nadzieję, że to pomoże!
A w jaki sposób przetwarzane są nazwy sekcji ([[nazwa Apple # tutaj], bit #Name_here) ...? Powiedziałeś "usuń fragmenty mieszające" tak, jakby były ignorowane. –
"Zabronione potrójne sekwencje tyldy (~~~) (z jakiegoś powodu)" - Potrójne tyldy [są rozszerzone] (https://www.mediawiki.org/wiki/Help:Signatures) do podpisów na stronie zapisz, więc robi nie pozwalać im na tytuł (byłoby to trudne lub niemożliwe do połączenia z taką stroną). – leo
- 1. Wikipedia Mediawiki API dostać IdStrony z URL
- 2. Interfejs API MediaWiki i kodowanie
- 3. Kodowanie URI Lucee (cyrylica)
- 4. Handling Kodowanie znaków w URI na Tomcat
- 5. Wikipedia API dla Pythona
- 6. . Net Uri Kodowanie RFC 2396 kontra RFC 3986
- 7. Ponowne indeksowanie ogromna baza danych (angielska Wikipedia) skutecznie
- 8. Wikipedia Kategoria Hierarchia od zrzutu
- 9. Pobierz plik pdf z wikipedia
- 10. zmiana rozmiaru animacji na wikipedia
- 11. Przekoduj kategorię w MediaWiki
- 12. Problem z ciastkami mediawiki
- 13. Stylizacja MediaWiki dla iPhone'a
- 14. Interpretacja wyjściowa profilowania MediaWiki
- 15. Kodowanie kanadyjskich kodów kreskowychBank
- 16. Przeglądarka obiektów 3D w MediaWiki?
- 17. Podświetlanie składni inline w MediaWiki
- 18. interpolacja liniowa kod Wikipedia - Nie rozumiem to
- 19. Wikipedia API - Uzyskiwanie dostępu do obiektu JSON
- 20. Wielkość klucza TripleDES - .NET vs Wikipedia
- 21. Znajdowanie i pobieranie obrazów w usypie Wikipedia
- 22. wikipedia strona do strony odsyłacze według IdStrony
- 23. Charset w danych URI
- 24. URI :: InvalidURIError: bad URI (URI nie jest?) Testowanie kontrolerów Rails
- 25. Kodowanie UTF-8 Kodowanie rozmiaru:
- 26. Kodowanie zagnieżdżone Kodowanie zagnieżdżone modele
- 27. Konstruktor Uri (Uri, String) nie działa poprawnie?
- 28. Konwertuj plik uri na zawartość uri
- 29. Konwersja Uri String i String do Uri
- 30. Jak przekonwertować plik: // uri do treści: // uri?
Wierzę, że 'mod_rewrite' nie przepisuje adresów URL na' index.php? Title = Foo_bar'. Linki są przerobione (jeśli w ogóle) na "indeks".php/Foo_bar', a następnie odczytane przez '$ _SERVER ['REQUEST_URI']' lub coś podobnego. – lonesomeday