From 76743c242a5aef7cdd0e2a0aed83fa0e800ebb02 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Tim=20D=C3=BCsterhus?= Date: Wed, 20 Jul 2016 00:41:19 +0200 Subject: [PATCH] Properly support unicode characters in mentions --- .../event/listener/PreParserAtUserListener.class.php | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php b/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php index f6374ac7d2..01883203db 100644 --- a/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php +++ b/wcfsetup/install/files/lib/system/event/listener/PreParserAtUserListener.class.php @@ -109,14 +109,16 @@ class PreParserAtUserListener implements IParameterizedEventListener { $text = $userRegex->replace($text, new Callback(function ($matches) use ($users) { // containing the full match - $usernames = array($matches[1]); + $usernames = array( + 'full' => $matches[1] + ); // containing only the part before the first space - if (isset($matches[2])) $usernames[] = $matches[2]; + if (isset($matches[2])) $usernames['part'] = $matches[2]; $usernames = array_map(array('\wcf\system\event\listener\PreParserAtUserListener', 'getUsername'), $usernames); - foreach ($usernames as $username) { + foreach ($usernames as $type => $username) { if (!isset($users[$username])) continue; $link = LinkHandler::getInstance()->getLink('User', array( 'appendSession' => false, @@ -126,8 +128,8 @@ class PreParserAtUserListener implements IParameterizedEventListener { $mention = "[url='".$link."']@".$users[$username]->username.'[/url]'; // check if only the part before the first space matched, in that case append the second word - if (isset($matches[2]) && strcasecmp($matches[2], $username) === 0) { - $mention .= mb_substr($matches[1], strlen($matches[2])); + if ($type === 'part') { + $mention .= mb_substr($matches[1], mb_strlen($matches[2])); } return $mention; -- 2.20.1