Go to the documentation of this file.
73 if ( $this->language->needsGenderDistinction() &&
77 $gender = $this->genderCache->getGenderOf( $text, __METHOD__ );
78 $name = $this->language->getGenderNsText( $namespace, $gender );
80 $name = $this->language->getNsText( $namespace );
83 if (
$name ===
false ) {
84 throw new InvalidArgumentException(
'Unknown namespace ID: ' . $namespace );
101 public function formatTitle( $namespace, $text, $fragment =
'' ) {
102 if ( $namespace !==
false ) {
105 if ( $namespace !==
'' ) {
106 $text = $namespace .
':' . $text;
110 if ( $fragment !==
'' ) {
111 $text = $text .
'#' . $fragment;
114 $text = str_replace(
'_',
' ', $text );
129 public function parseTitle( $text, $defaultNamespace ) {
136 if ( $parts[
'interwiki'] !==
'' ) {
141 if ( $parts[
'dbkey'] ===
'' ) {
145 return new TitleValue( $parts[
'namespace'], $parts[
'dbkey'], $parts[
'fragment'] );
202 $dbkey = str_replace(
' ',
'_', $text );
208 'namespace' => $defaultNamespace,
210 'user_case_dbkey' => $dbkey,
213 # Strip Unicode bidi override characters.
214 # Sometimes they slip into cut-n-pasted page titles, where the
215 # override chars get included in list displays.
216 $dbkey = preg_replace(
'/\xE2\x80[\x8E\x8F\xAA-\xAE]/S',
'', $dbkey );
218 # Clean up whitespace
219 # Note: use of the /u option on preg_replace here will cause
220 # input with invalid UTF-8 sequences to be nullified out in PHP 5.2.x,
221 # conveniently disabling them.
222 $dbkey = preg_replace(
'/[ _\xA0\x{1680}\x{180E}\x{2000}-\x{200A}\x{2028}\x{2029}\x{202F}\x{205F}\x{3000}]+/u',
'_', $dbkey );
223 $dbkey = trim( $dbkey,
'_' );
226 # Contained illegal UTF-8 sequences or forbidden Unicode chars.
230 $parts[
'dbkey'] = $dbkey;
232 # Initial colon indicates main namespace rather than specified default
233 # but should not create invalid {ns,title} pairs such as {0,Project:Foo}
234 if ( $dbkey !==
'' &&
':' == $dbkey[0] ) {
236 $dbkey = substr( $dbkey, 1 ); #
remove the colon but
continue processing
237 $dbkey = trim( $dbkey,
'_' ); #
remove any subsequent whitespace
240 if ( $dbkey ==
'' ) {
244 # Namespace or interwiki prefix
246 $prefixRegexp =
"/^(.+?)_*:_*(.*)$/S";
249 if ( preg_match( $prefixRegexp, $dbkey, $m ) ) {
251 if ( ( $ns = $this->language->getNsIndex( $p ) ) !==
false ) {
254 $parts[
'namespace'] = $ns;
255 # For Talk:X pages, check if X has a "namespace" prefix
256 if ( $ns ==
NS_TALK && preg_match( $prefixRegexp, $dbkey, $x ) ) {
257 if ( $this->language->getNsIndex( $x[1] ) ) {
258 # Disallow Talk:File:x type titles...
262 # Disallow Talk:Interwiki:x type titles...
269 # Can't make a local interwiki link to an interwiki link.
276 $parts[
'interwiki'] = $this->language->lc( $p );
278 # Redundant interwiki prefix to the local wiki
279 foreach ( $this->localInterwikis
as $localIW ) {
280 if ( 0 == strcasecmp( $parts[
'interwiki'], $localIW ) ) {
281 if ( $dbkey ==
'' ) {
282 # Can't have an empty self-link
285 $parts[
'interwiki'] =
'';
288 # Do another namespace split...
293 # If there's an initial colon after the interwiki, that also
294 # resets the default namespace
295 if ( $dbkey !==
'' && $dbkey[0] ==
':' ) {
297 $dbkey = substr( $dbkey, 1 );
300 # If there's no recognized interwiki or namespace,
301 # then let the colon expression be part of the title.
306 $fragment = strstr( $dbkey,
'#' );
307 if (
false !== $fragment ) {
308 $parts[
'fragment'] = str_replace(
'_',
' ', substr( $fragment, 1 ) );
309 $dbkey = substr( $dbkey, 0, strlen( $dbkey ) - strlen( $fragment ) );
310 # remove whitespace again: prevents "Foo_bar_#"
311 # becoming "Foo_bar_"
312 $dbkey = preg_replace(
'/_*$/',
'', $dbkey );
315 # Reject illegal characters.
317 if ( preg_match( $rxTc, $dbkey ) ) {
321 # Pages with "/./" or "/../" appearing in the URLs will often be un-
322 # reachable due to the way web browsers deal with 'relative' URLs.
323 # Also, they conflict with subpage syntax. Forbid them explicitly.
325 strpos( $dbkey,
'.' ) !==
false &&
327 $dbkey ===
'.' || $dbkey ===
'..' ||
328 strpos( $dbkey,
'./' ) === 0 ||
329 strpos( $dbkey,
'../' ) === 0 ||
330 strpos( $dbkey,
'/./' ) !==
false ||
331 strpos( $dbkey,
'/../' ) !==
false ||
332 substr( $dbkey, -2 ) ==
'/.' ||
333 substr( $dbkey, -3 ) ==
'/..'
339 # Magic tilde sequences? Nu-uh!
340 if ( strpos( $dbkey,
'~~~' ) !==
false ) {
344 # Limit the size of titles to 255 bytes. This is typically the size of the
345 # underlying database field. We make an exception for special pages, which
346 # don't need to be stored in the database, and may edge over 255 bytes due
347 # to subpage syntax for long titles, e.g. [[Special:Block/Long name]]
349 ( $parts[
'namespace'] !=
NS_SPECIAL && strlen( $dbkey ) > 255 )
350 || strlen( $dbkey ) > 512
355 # Normally, all wiki links are forced to have an initial capital letter so [[foo]]
356 # and [[Foo]] point to the same place. Don't force it for interwikis, since the
357 # other site might be case-sensitive.
358 $parts[
'user_case_dbkey'] = $dbkey;
359 if ( $parts[
'interwiki'] ===
'' ) {
363 # Can't make a link to a namespace alone... "empty" local links can only be
364 # self-links with a fragment identifier.
365 if ( $dbkey ==
'' && $parts[
'interwiki'] ===
'' ) {
366 if ( $parts[
'namespace'] !=
NS_MAIN ) {
382 if ( $dbkey !==
'' &&
':' == $dbkey[0] ) {
387 $parts[
'dbkey'] = $dbkey;
skin txt MediaWiki includes four core it has been set as the default in MediaWiki since the replacing Monobook it had been been the default skin since before being replaced by Vector largely rewritten in while keeping its appearance Several legacy skins were removed in the as the burden of supporting them became too heavy to bear Those in etc for skin dependent CSS etc for skin dependent JavaScript These can also be customised on a per user by etc This feature has led to a wide variety of user styles becoming that gallery is a good place to ending in php
static hasGenderDistinction( $index)
Does the namespace (potentially) have different aliases for different genders.
Caches user genders when needed to use correct namespace aliases.
null means default in associative array with keys and values unescaped Should be merged with default with a value of false meaning to suppress the attribute in associative array with keys and values unescaped noclasses just before the function returns a value If you return an< a > element with HTML attributes $attribs and contents $html will be returned If you return $ret will be returned and may include noclasses after processing after processing
the array() calling protocol came about after MediaWiki 1.4rc1.
List of Api Query prop modules.
A title parser service for MediaWiki.
presenting them properly to the user as errors is done by the caller $title
Allows to change the fields on the form that will be generated $name
getText()
Returns the title in text form, without namespace prefix or fragment.
static sanitizeIP( $ip)
Convert an IP into a verbose, uppercase, normalized form.
static capitalize( $text, $ns=NS_MAIN)
Capitalize a text string for a title if it belongs to a namespace that capitalizes.
This document is intended to provide useful advice for parties seeking to redistribute MediaWiki to end users It s targeted particularly at maintainers for Linux since it s been observed that distribution packages of MediaWiki often break We ve consistently had to recommend that users seeking support use official tarballs instead of their distribution s and this often solves whatever problem the user is having It would be nice if this could such as
static getTitleInvalidRegex()
Returns a simple regex that will match on characters and sequences invalid in titles.
Internationalisation code.
static isValidInterwiki( $prefix)
Check whether an interwiki prefix exists.
Represents a page (or page fragment) title within MediaWiki.