From: Rotem Liss Date: Fri, 1 Aug 2008 13:03:34 +0000 (+0000) Subject: Properly escape URL fragment in Linker::link (using Title::getFragementForURL), else... X-Git-Tag: 1.31.0-rc.0~46223 X-Git-Url: http://git.cyclocoop.org/%24href?a=commitdiff_plain;h=c2519cd89c1021fb9d1fd7d07fe0bc6b5819c796;p=lhc%2Fweb%2Fwiklou.git Properly escape URL fragment in Linker::link (using Title::getFragementForURL), else it breaks in non-ASCII characters. Bug reported by Hebrew Wikipedia users. --- diff --git a/includes/Linker.php b/includes/Linker.php index 278e97465d..2eee38ebee 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -221,19 +221,21 @@ class Linker { $query['action'] = 'edit'; $query['redlink'] = '1'; } + $fragment = $target->getFragmentForURL(); + $title = $target->getPrefixedText(); # A couple of things to be concerned about here. First of all, # getLocalURL() ignores fragments. Second of all, if the Title is # *only* a fragment, it returns something like "/". - if( $target->getFragment() === '' and $target->getPrefixedText() !== '' ) { + if( $fragment === '' and $title !== '' ) { return $target->getLocalURL( $query ); } - if( $target->getPrefixedText() === '' ) { + if( $title === '' ) { # Just a fragment. There had better be one, anyway, or this is a # pretty silly Title. - return '#'.$target->getFragment(); + return $fragment; } # Then we must have a fragment *and* some Title text. - return $target->getLocalURL( $query ).'#'.$target->getFragment(); + return $target->getLocalURL( $query ) . $fragment; } private function linkAttribs( $target, $attribs, $options ) {