2010-10-06 15 views
5

¿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

4

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.

+0

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

6

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!

+0

¿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. –

+0

"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

Cuestiones relacionadas