¿Cómo codifica Wikipedia (o MediaWiki en general) los títulos de página en URI? No es una codificación URI normal, ya que los espacios se reemplazan con guiones bajos y las comillas dobles no están codificadas y cosas por el estilo.Wikipedia (MediaWiki) Esquema de codificación URI
Respuesta
http://en.wikipedia.org/wiki/Wikipedia:Naming_conventions_%28technical_restrictions%29 - aquí tiene algún tipo de descripción de lo que su motor aplica a los nombres de los artículos.
Deben tener algo como esto en su LocalSettings.php: $ wgArticlePath = '/ wiki/$ 1';
y el servidor URI correcto reescribe la configuración; parece que están usando Apache (encabezado HTTP), por lo que probablemente sea mod_rewrite. http://www.mediawiki.org/wiki/Manual:Short_URL
También puede hacer referencia al archivo index.php para un artículo en la Wikipedia como esto: http://en.wikipedia.org/w/index.php?title=Foo%20bar
y redirigidos por el motor a http://en.wikipedia.org/wiki/Foo_bar
. Detrás de las escenas, mod_rewrite lo traduce a /index.php?title=Foo_bar. Para el motor de MediaWiki es lo mismo que si visitaras http://en.wikipedia.org/w/index.php?title=Foo_bar
- esta página no te redirecciona.
El proceso es bastante complejo y no es exactamente bonito. Debe consultar la clase Title
que se encuentra en includes/Title.php
. Debe comenzar con el método newFromText
, pero la mayor parte de la lógica está en el método secureAndSplit
.
Tenga en cuenta que (como siempre con MediaWiki) el código no está desacoplado en lo más mínimo. Si desea replicarlo, necesitará extraer la lógica en lugar de simplemente reutilizar la clase.
La lógica es como la siguiente:
- referencias de caracteres Decode (por ejemplo & eacute;)
- Convertir espacios en guiones
- Comprobar si el título es una referencia a un espacio de nombres o InterWiki
- Eliminar fragmentos hash (por ej.
Apple#Name
- Eliminar caracteres prohibidos
- Prohibir enlaces de subdirectorio (p.
../directory/page
) - Prohibir secuencias triples tilde (
~~~
) (por alguna razón) - limitar el tamaño de 255 bytes
- mayúscula la primera letra
Por otra parte, creo que estoy en lo correcto al decir que las comillas no necesitan ser codificadas por el usuario original; los navegadores pueden manejarlas de forma transparente.
Espero que ayude!
¿Y cómo se procesan los nombres de sección ([[Nombre de Apple # aquí]], el bit # Nombre_aquí)? Dijiste 'eliminar fragmentos hash' como si se hubieran ignorado. –
"Prohibir secuencias de triple tilde (~~~) (por alguna razón)" - Triple tildes [están expandidas] (https://www.mediawiki.org/wiki/Help:Signatures) a las firmas en la página de guardar, por lo que hace sentido de no permitirlos en los títulos (sería complicado o imposible vincular a dicha página). – leo
- 1. esquema URI no es "archivo"
- 2. Esquema de codificación de REST URL Spring:% 20 o + ¿Cuál?
- 3. ¿Cómo obtener Infobox de un artículo de Wikipedia de Mediawiki API?
- 4. URI no válido de RestSharp: el esquema de URI no es válido
- 5. ¿Por qué Wikipedia usa un porcentaje de codificación modificado en sus fragmentos de URL?
- 6. Manejo de codificación de caracteres en la URI en Tomcat
- 7. Falla incrustar mediante el uso de datos esquema URI
- 8. ¿Cómo acceder a Wikipedia desde R?
- 9. El 'esquema' de esquema de URI proporcionado no es válido. 'Http'
- 10. ¿Cómo obtener los datos de Infobox de Wikipedia?
- 11. Ayuda con C# HttpWebRequest URI perdiendo su codificación
- 12. ¿Cómo funciona el "enlace de Wikipedia" de Wikipedia?
- 13. URL para codificación URI cambia un "% 3D" a "% 253D"
- 14. Integración de WordPress MediaWiki
- 15. ¿Cómo funciona la función "editar sección" en la Wikipedia?
- 16. ¿Cómo usar la API de wikipedia si existe?
- 17. URI :: InvalidURIError (URI incorrecto (¿no es URI?):):
- 18. Descarga de texto de Wikipedia
- 19. Incrustar doxygen en mediawiki
- 20. Fusionando contenidos de MediaWiki juntos
- 21. Diseño de MediaWiki para iPhone
- 22. Analizador para Wikipedia
- 23. cierres Scala en Wikipedia
- 24. ¿Puedo usar contenido de Wikipedia?
- 25. API de Wikipedia para geolocalizaciones
- 26. Resumiendo un artículo de Wikipedia
- 27. Nueva indexación enorme base de datos (del Inglés Wikipedia)
- 28. Extraer párrafos de API Wikipedia usando PHP cURL
- 29. URI Mapeo de MusicBrainz en Spotify URI
- 30. API de Wikipedia: ¿cómo obtener el número de revisiones de una página?
Creo que 'mod_rewrite' no reescribe las URL a' index.php? Title = Foo_bar'. Los enlaces se reescriben (si acaso) para 'indexar.php/Foo_bar' y luego leído por '$ _SERVER ['REQUEST_URI']' o algo similar. – lonesomeday