"AAAAA", )), array("libero dolor {condimentum} orci, ut venenatis urna risus sed mauris. @Nunc cursus nulla eu elit vestibulum @tristique. In pulvinar diam quis ultrices pellentesque. Sed velit arcu",array( "condimentum" => "AAAAA", "Nunc" => "BBBBB", "@tristique" => "CCCCC", )), array("aliquet, eros nec sollicitudin {dignissim}, lorem urna dapibus nunc, quis venenatis nulla orci et nisl. {Maecenas} lacinia ultricies leo, eget lobortis risus lobortis non. In tortor elit, semper vel mauris in, convallis congue nisl. Phasellus a pretium lorem, at egestas nibh. Sed luctus massa vel enim accumsan tempor. Vestibulum gravida enim imperdiet nibh venenatis condimentum. Quisque at ultricies velit",array( "dignissim" => "AAAAA", "Maecenas" => "BBBBB", )), array("ultrices eu magna. Nullam sodales mi vel diam fringilla iaculis. Nullam sit amet gravida",array( )), array("nec sollicitudin tellus bibendum sed. Maecenas faucibus pulvinar lobortis. Quisque in risus congue, commodo nunc ac, consequat libero. Morbi pulvinar lorem ac viverra",array( )), array("sollicitudin velit in {consectetur} lacinia. Quisque eros",array( "consectetur" => "AAAAA", )), array("olestie enim, ac tempor quam. @Morbi aliquam adipiscing facilisis. Etiam laoreet !vehicula urna. Sed consequat ornare semper. %Vivamus eget malesuada turpis. Morbi sodales mi ut placerat laoreet. Nulla elementu",array( "@Morbi" => "AAAAA", "!vehicula" => "BBBBB", "%Vivamus" => "CCCCC", )), array("Etiam eget dignissim eros. Cras porta et elit vel {dignissim}. Nulla quis nisl",array( "dignissim" => "AHAH", )), array("mattis eu. Praesent eget !accumsan libero. Donec %sit amet aliquam leo. Duis !pharetra ante in justo sagittis, sit @amet placerat elit !tristique. Donec in aliquet metus, nec dapibus velit. Nunc bibendum quam in nisi luctus vehicula. Morbi at ultrices libero. Nullam pharetra luctus velit id porta. Etiam condimentum nisi et sem dictum vulputate. Etiam in s",array( "!accumsan" => "AAAAA", "%sit" => "BBBBB", "!pharetra" => "CCCCC", "@amet" => "DDDDD", "!tristique" => "EEEEE", )), array("unc sit amet {porttitor} magna. Sed et rhoncus nisl. Vivamus {blandit} tincidunt odio ac bibendum. {Phasellus} ornare bibendum eros, nec ornare felis fermentum ac. Etiam accumsan quam mattis, pretium velit a, sod",array( "porttitor" => "AAAAA", "blandit" => "BBBBB", "Phasellus" => "CCCCC", )), array(". In ut consectetur risus, eu vestibulum nisi. Pellentesque ut semper diam, at egestas leo. Quisque vel neque quis nulla venenatis consectetur. Cras gravida imperdiet quam, in scelerisque velit placerat a. Nam in massa urna. Aliquam non lo",array( )), array("ullamcorper accumsan ipsum, vitae condimentum",array( )), array("Aenean massa magna, molestie eget leo vel, luctus posuere dolor. Quisque",array( )), array("tincidunt @dapibus velit, non !sagittis dui malesuada id. %Integer pretium tortor lacinia ipsum blandit, at convallis dui commodo. Nulla gravida mi sem, eget commodo felis suscipit et. Aliquam erat volutpat. Nunc facilisis est sit amet odio fermentum, quis ultrices dolor blandit. Maecenas hendrerit sapien sed scelerisque consectetur",array( "!sagittis" => "BBBBB", "%Integer" => "CCCCC", "@dapibus" => "AAAAA", )), array("porttitor. Cras vel dapibus turpis, ac cursus nulla. Etiam",array( )), array("vehicula sit amet, rhoncus ut odio. Sed lobortis non ligula placerat malesuada",array( )), array("luctus a, imperdiet nec lacus. Aenean ornare lorem justo",array( )), array("sapien ac egestas. Sed porta rhoncus nunc sed pulvinar. Donec dolor odio, sollicitudin sit amet orci at, auctor luctus turpis. Quisque adipiscing lobortis lectus vel fringilla. Proin ac augue",array( )), array("diam mi, fringilla quis tortor vel, vehicula tincidunt nisl. Donec sit amet arcu mattis",array( )), array("conubia nostra, per inceptos himenaeos. Nulla vehicula egestas cursus. Fusce sollicitudin id purus eget semper. Cras luctus ligula at sollicitudin eleifend. Cras lobortis imperdiet lacus id varius",array( )), array("Test {with} two {encapsuled} strings", array( "with" => "WITH", "encapsuled" => "ENCAPSULED", )), ); function parseMessagePlaceholders(&$message, array &$context) { $variables = array(); $has_ps3 = FALSE; if (($start = strpos($message, '{')) !== FALSE) { $has_ps3 = TRUE; // Replace PS3 messages containing placeholders. $message = preg_replace('/\{([^\}]*)\}/', '@$1', $message); } foreach ($context as $key => $variable) { // PSR3 style placeholders. if ($has_ps3) { // Keys are not prefixed with anything according to PSR3 specs. // If the message is "User {username} created" the variable key will be // just "username". if (!empty($key) && $key['0'] !== '@') { $key = '@' . $key; } } if (!empty($key) && ($key[0] === '@' || $key[0] === '%' || $key[0] === '!')) { // The key is now in \Drupal\Component\Utility\String::format() style. $variables[$key] = $variable; } } $context['variables'] = $variables; } function parseMessagePlaceholdersLegacy(&$message, array &$context) { $variables = array(); $has_ps3 = FALSE; if (($start = strpos($message, '{')) !== FALSE && strpos($message, '}') > $start) { $has_ps3 = TRUE; // Replace PS3 messages containing placeholders. $message = preg_replace('/\{([^\}]*)\}/', '@$1', $message); } foreach ($context as $key => $variable) { // PSR3 style placeholders. if ($has_ps3) { // Keys are not prefixed with anything according to PSR3 specs. // If the message is "User {username} created" the variable key will be // just "username". if (strpos($message, '@' . $key) !== FALSE) { $key = '@' . $key; } } if (strpos($key, '@') === 0 || strpos($key, '%') === 0 || strpos($key, '!') === 0) { // The key is now in \Drupal\Component\Utility\String::format() style. $variables[$key] = $variable; } } $context['variables'] = $variables; } $len = count($keys); $start = microtime(true); for ($i = 0; $i < $max; ++$i) { list($msg, $ctx) = $keys[$i % 4]; parseMessagePlaceholders($msg, $ctx); } echo "parseMessagePlaceholders() " . round($a = (microtime(true) - $start), 3) . "s\n"; $start = microtime(true); for ($i = 0; $i < $max; ++$i) { list($msg, $ctx) = $keys[$i % 4]; parseMessagePlaceholdersLegacy($msg, $ctx); } echo "parseMessagePlaceholdersLegacy() " . round($b = (microtime(true) - $start), 3) . "s\n"; echo "gain: " . ceil((1 - ($a / $b)) * 100) . "%\n"; echo "\ntest:"; foreach ($keys as $values) { list ($msg, $ctx) = $values; echo " == ", $msg, "\n"; parseMessagePlaceholdersLegacy($msg, $ctx); echo " => ", $msg, "\n"; }