X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2FGlobalFunctions.php;h=04738d66969717cd0598ab427ae36c9d7bd7956f;hb=ee1f2b3c31e9b187334a013b8acbeed764082d6b;hp=e5f6f4cadd98d2b2d4b708c83595b40ebadd1672;hpb=28de6d99d21c90d554345f64650d95d62bbc8fea;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/GlobalFunctions.php b/includes/GlobalFunctions.php index e5f6f4cadd..04738d6696 100644 --- a/includes/GlobalFunctions.php +++ b/includes/GlobalFunctions.php @@ -84,10 +84,11 @@ if ( !function_exists( 'mb_substr' ) ) { * with no UTF-8 support. * * @param string $string String having html entities - * @param $quote_style - * @param string $charset Encoding set to use (default 'ISO-8859-1') + * @param $quote_style the quote style to pass as the second argument to + * get_html_translation_table() + * @param string $charset Encoding set to use (default 'UTF-8') */ -function do_html_entity_decode( $string, $quote_style=ENT_COMPAT, $charset='ISO-8859-1' ) { +function do_html_entity_decode( $string, $quote_style=ENT_COMPAT, $charset='UTF-8' ) { $fname = 'do_html_entity_decode'; wfProfileIn( $fname ); @@ -161,7 +162,7 @@ function wfRandom() { # The maximum random value is "only" 2^31-1, so get two random # values to reduce the chance of dupes $max = mt_getrandmax(); - $rand = number_format( mt_rand() * mt_rand() + $rand = number_format( (mt_rand() * $max + mt_rand()) / $max / $max, 12, '.', '' ); return $rand; } @@ -183,23 +184,26 @@ function wfUrlencode ( $s ) { /** * Return the UTF-8 sequence for a given Unicode code point. - * Currently doesn't work for values outside the Basic Multilingual Plane. + * Doesn't work for values outside the Basic Multilingual Plane. * * @param string $codepoint UTF-8 code point. - * @return string HTML UTF-8 Entitie such as 'Ӓ'. + * @return string An UTF-8 character if the codepoint is in the BMP and + * &#$codepoint if it isn't; */ function wfUtf8Sequence( $codepoint ) { - if($codepoint < 0x80) return chr($codepoint); - if($codepoint < 0x800) return chr($codepoint >> 6 & 0x3f | 0xc0) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x10000) return chr($codepoint >> 12 & 0x0f | 0xe0) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); - if($codepoint < 0x110000) return chr($codepoint >> 18 & 0x07 | 0xf0) . - chr($codepoint >> 12 & 0x3f | 0x80) . - chr($codepoint >> 6 & 0x3f | 0x80) . - chr($codepoint & 0x3f | 0x80); - + if($codepoint < 0x80) + return chr($codepoint); + if($codepoint < 0x800) + return chr($codepoint >> 6 & 0x3f | 0xc0) . chr($codepoint & 0x3f | 0x80); + if($codepoint < 0x10000) + return chr($codepoint >> 12 & 0x0f | 0xe0) . + chr($codepoint >> 6 & 0x3f | 0x80) . + chr($codepoint & 0x3f | 0x80); + if($codepoint < 0x110000) + return chr($codepoint >> 18 & 0x07 | 0xf0) . + chr($codepoint >> 12 & 0x3f | 0x80) . + chr($codepoint >> 6 & 0x3f | 0x80) . + chr($codepoint & 0x3f | 0x80); # There should be no assigned code points outside this range, but... return "&#$codepoint;"; } @@ -207,15 +211,16 @@ function wfUtf8Sequence( $codepoint ) { /** * Converts numeric character entities to UTF-8 * + * @todo Do named entities + * * @param string $string String to convert. * @return string Converted string. */ function wfMungeToUtf8( $string ) { global $wgInputEncoding; # This is debatable #$string = iconv($wgInputEncoding, "UTF-8", $string); - $string = preg_replace ( '/&#([0-9]+);/e', 'wfUtf8Sequence($1)', $string ); + $string = preg_replace ( '/�*([0-9]+);/e', 'wfUtf8Sequence($1)', $string ); $string = preg_replace ( '/&#x([0-9a-f]+);/ie', 'wfUtf8Sequence(0x$1)', $string ); - # Should also do named entities here return $string; } @@ -264,7 +269,10 @@ function wfDebug( $text, $logonly = false ) { $wgOut->debug( $text ); } if ( '' != $wgDebugLogFile && !$wgProfileOnly ) { - error_log( $text, 3, $wgDebugLogFile ); + # Strip unprintables; they can switch terminal modes when binary data + # gets dumped, which is pretty annoying. + $text = preg_replace( '![\x00-\x08\x0b\x0c\x0e-\x1f]!', ' ', $text ); + @error_log( $text, 3, $wgDebugLogFile ); } } @@ -302,7 +310,7 @@ function logProfilingData() { $forward .= ' from ' . $_SERVER['HTTP_FROM']; if( $forward ) $forward = "\t(proxied via {$_SERVER['REMOTE_ADDR']}{$forward})"; - if($wgUser->getId() == 0) + if( $wgUser->isAnon() ) $forward .= ' anon'; $log = sprintf( "%s\t%04.3f\t%s\n", gmdate( 'YmdHis' ), $elapsed, @@ -330,7 +338,9 @@ function wfReadOnly() { /** - * Get a message from anywhere, for the UI elements + * Get a message from anywhere, for the current user language + * + * @param string */ function wfMsg( $key ) { $args = func_get_args(); @@ -339,7 +349,7 @@ function wfMsg( $key ) { } /** - * Get a message from anywhere, for the content + * Get a message from anywhere, for the current global language */ function wfMsgForContent( $key ) { global $wgForceUIMsgAsContentMsg; @@ -390,8 +400,7 @@ function wfMsgReal( $key, $args, $useDB, $forContent=false ) { if( is_object( $wgMessageCache ) ) { $message = $wgMessageCache->get( $key, $useDB, $forContent ); - } - else { + } else { if( $forContent ) { $lang = &$wgContLang; } else { @@ -399,7 +408,12 @@ function wfMsgReal( $key, $args, $useDB, $forContent=false ) { } wfSuppressWarnings(); - $message = $lang->getMessage( $key ); + + if( is_object( $lang ) ) { + $message = $lang->getMessage( $key ); + } else { + $message = ''; + } wfRestoreWarnings(); if(!$message) $message = Language::getMessage($key); @@ -407,6 +421,10 @@ function wfMsgReal( $key, $args, $useDB, $forContent=false ) { $message = $wgParser->transformMsg($message, $wgMsgParserOptions); } } + + # Fix windows line-endings + # Some messages are split with explode("\n", $msg) + $message = str_replace( "\r", '', $message ); # Replace arguments if( count( $args ) ) { @@ -463,32 +481,62 @@ function wfErrorExit() { function wfDebugDieBacktrace( $msg = '' ) { global $wgCommandLineMode; - if ( function_exists( 'debug_backtrace' ) ) { + $backtrace = wfBacktrace(); + if ( $backtrace !== false ) { if ( $wgCommandLineMode ) { - $msg .= "\nBacktrace:\n"; + $msg .= "\nBacktrace:\n$backtrace"; } else { - $msg .= "\n

Backtrace:

\n