X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FWebRequest.php;h=985697a4f37de1bc8755da54e27ab32f94502aff;hb=cd724523d697bdbaa2c86d222f81ff660d05d51e;hp=de7c13ac2bf9294c8373d4a5f8d98b08622d2bf1;hpb=0e082d44544b2512812397aaaff65adb12d94be0;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/WebRequest.php b/includes/WebRequest.php index de7c13ac2b..985697a4f3 100644 --- a/includes/WebRequest.php +++ b/includes/WebRequest.php @@ -40,20 +40,16 @@ class WebRequest { global $wgUsePathInfo; if( isset( $_SERVER['PATH_INFO'] ) && $wgUsePathInfo ) { # Stuff it! - $_REQUEST['title'] = substr( $_SERVER['PATH_INFO'], 1 ); - } - global $wgUseLatin1; - if( !$wgUseLatin1 ) { - require_once( 'normal/UtfNormal.php' ); - wfProfileIn( 'WebRequest:normalizeUnicode-fix' ); - $this->normalizeUnicode( $_REQUEST ); - wfProfileOut( 'WebRequest:normalizeUnicode-fix' ); + $_GET['title'] = $_REQUEST['title'] = + substr( $_SERVER['PATH_INFO'], 1 ); } } /** * Recursively strips slashes from the given array; * used for undoing the evil that is magic_quotes_gpc. + * @param array &$arr will be modified + * @return array the original array * @private */ function &fix_magic_quotes( &$arr ) { @@ -87,59 +83,98 @@ class WebRequest { /** * Recursively normalizes UTF-8 strings in the given array. + * @param array $data string or array + * @return cleaned-up version of the given * @private */ - function normalizeUnicode( &$arr ) { - foreach( $arr as $key => $val ) { - if( is_array( $val ) ) { - $this->normalizeUnicode( $arr[$key ] ); - } else { - $arr[$key] = UtfNormal::cleanUp( $val ); + function normalizeUnicode( $data ) { + if( is_array( $data ) ) { + foreach( $data as $key => $val ) { + $data[$key] = $this->normalizeUnicode( $val ); } + } else { + $data = UtfNormal::cleanUp( $data ); } + return $data; } /** * Fetch a value from the given array or return $default if it's not set. + * @param array &$arr + * @param string $name + * @param mixed $default + * @return mixed * @private */ function getGPCVal( &$arr, $name, $default ) { if( isset( $arr[$name] ) ) { - return $arr[$name]; + global $wgUseLatin1, $wgServer, $wgContLang; + $data = $arr[$name]; + if( isset( $_GET[$name] ) && + !is_array( $data ) && + ( empty( $_SERVER['HTTP_REFERER'] ) || + strncmp($wgServer, $_SERVER['HTTP_REFERER'], strlen( $wgServer ) ) ) ) { + # For links that came from outside, check for alternate/legacy + # character encoding. + if( isset( $wgContLang ) ) { + $data = $wgContLang->checkTitleEncoding( $data ); + } + } + if( !$wgUseLatin1 ) { + require_once( 'normal/UtfNormal.php' ); + $data = $this->normalizeUnicode( $data ); + } + return $data; } else { return $default; } } - + /** - * Fetch a value from the given array or return $default if it's not set. - * \r is stripped from the text, and with some language modules there is - * an input transliteration applied. - * @private + * Fetch a scalar from the input or return $default if it's not set. + * Returns a string. Arrays are discarded. + * + * @param string $name + * @param string $default optional default (or NULL) + * @return string */ - function getGPCText( &$arr, $name, $default ) { - # Text fields may be in an alternate encoding which we should check. - # Also, strip CRLF line endings down to LF to achieve consistency. - global $wgLang; - if( isset( $arr[$name] ) ) { - return str_replace( "\r\n", "\n", $wgLang->recodeInput( $arr[$name] ) ); + function getVal( $name, $default = NULL ) { + $val = $this->getGPCVal( $_REQUEST, $name, $default ); + if( is_array( $val ) ) { + $val = $default; + } + if( is_null( $val ) ) { + return null; } else { - return $default; + return (string)$val; } } /** - * Fetch a value from the input or return $default if it's not set. - * Value may be of any type -- even an array -- and is not altered. + * Fetch an array from the input or return $default if it's not set. + * If source was scalar, will return an array with a single element. + * If no source and no default, returns NULL. + * + * @param string $name + * @param array $default optional default (or NULL) + * @return array */ - function getVal( $name, $default = NULL ) { - return $this->getGPCVal( $_REQUEST, $name, $default ); + function getArray( $name, $default = NULL ) { + $val = $this->getGPCVal( $_REQUEST, $name, $default ); + if( is_null( $val ) ) { + return null; + } else { + return (array)$val; + } } - + /** * Fetch an integer value from the input or return $default if not set. - * Guaranteed to return an integer; non-integer input will typically + * Guaranteed to return an integer; non-numeric input will typically * return 0. + * @param string $name + * @param int $default + * @return int */ function getInt( $name, $default = 0 ) { return IntVal( $this->getVal( $name, $default ) ); @@ -149,6 +184,9 @@ class WebRequest { * Fetch a boolean value from the input or return $default if not set. * Guaranteed to return true or false, with normal PHP semantics for * boolean interpretation of strings. + * @param string $name + * @param bool $default + * @return bool */ function getBool( $name, $default = false ) { return $this->getVal( $name, $default ) ? true : false; @@ -158,6 +196,8 @@ class WebRequest { * Return true if the named value is set in the input, whatever that * value is (even "0"). Return false if the named value is not set. * Example use is checking for the presence of check boxes in forms. + * @param string $name + * @return bool */ function getCheck( $name ) { # Checkboxes and buttons are only present when clicked @@ -171,9 +211,16 @@ class WebRequest { * set. \r is stripped from the text, and with some language modules there * is an input transliteration applied. This should generally be used for * form