'~@([^\s]+)~'Я вроде бы пробовал этот вариант, и он чё-то работал не так, как надо было... В общем да, с этим шаблоном отпадают массивы и сопутствующие пара функций. В итоге код будет пока ещё таким:
* (+/-)
/**
* Обработка текстов перед выводом на экран
*
* @param string $str
* @param int $br Параметр обработки переносов строк
* 0 - не обрабатывать (по умолчанию)
* 1 - обрабатывать
* 2 - вместо переносов строки вставляются пробелы
* @param int $tags Параметр обработки тэгов
* 0 - не обрабатывать (по умолчанию)
* 1 - обрабатывать
* 2 - вырезать тэги
*
* @return string
*/
public static function checkout($str, $br = 0, $tags = 0)
{
$str = htmlentities(trim($str), ENT_QUOTES, 'UTF-8');
if ($br == 1) {
// Вставляем переносы строк
$str = nl2br($str);
} elseif ($br == 2) {
$str = str_replace("\r\n", ' ', $str);
}
if ($tags == 1) {
$str = bbcode::tags($str);
} elseif ($tags == 2) {
$str = bbcode::notags($str);
}
return self::linkUser($str);
}
/**
* Ссылка на профиль по символу @
*
* @param string $str
*
* @return string
*/
public static function linkUser($str) {
$str = preg_replace_callback(
'~@([^\s]+)~iu',
function ($a) {
$us = mysql_fetch_assoc(
mysql_query("
SELECT `id` FROM `users`
WHERE `name` = '". mysql_real_escape_string($a[1]) ."'
")
);
if (!empty($us['id'])) {
return '<a href="'. $home .'/users/profile.php?user='.
$us['id'] .'">'. $a[0] .'</a>';
} else {
return $a[0];
}
},
$str
);
return $str;
}