'~(@(.*))~iu'
->
'~@([^\s]+)~'
'~(@(.*))~iu'
->
'~@([^\s]+)~'
'~@([^\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;
}Модификаторы ui ненужны, шаблон не регистрозависимый же
но учти, данный шаблон пропустит все кроме пробела, конца строки
фильтрация обязательна
# ramzes (31.01.2017 / 18:50)На счёт регистра - согласен. А вот юникод в никах вполне может использоваться, поэтому "u" должен быть в шаблоне. На счёт фильтрации - там джоновские функции сперва отрабатывают, а потом уже результат передаётся в мой метод.
Модификаторы ui ненужны, шаблон не регистрозависимый же
но учти, данный шаблон пропустит все кроме пробела, конца строки
фильтрация обязательна
Ты не понял, шаблону все равно, уникод там или еще что, он сьедает все, кроме пробела.
Пофиг, какой регистр
Переписал скрипт с учётом всех предпочтений. Если кому-то не нравится @ перед ником, то вы можете задать любой другой(допустимый) символ(ы) во втором параметре метода linkUser($str, $s = '@')
Распаковать архив в корень сайта. Будут изменены файлы functions.php и bbcode.php.
ДоХтор, вроде как не так имелось ввиду, то есть перед записью в базу, ты меняешь @Вася на [url=/profile&id=1]Вася[/url]
тогда не будет парсинга при каждом обращении к странице
# Koenig (31.01.2017 / 23:55)Так и есть. Перед записью в базу парсится пост юзера, и если в базе есть такой ник, то @Вася меняется на [url=/profile&id=1]@Вася[/url] и сохраняется в базе. А при выводе уже база не дёргается, и обрабатывается bb-код.
ДоХтор, вроде как не так имелось ввиду, то есть перед записью в базу, ты меняешь @Вася на [url=/profile&id=1]Вася[/url]
тогда не будет парсинга при каждом обращении к странице
ДоХтор, так вроде у тебя новый ббкод, а можно обычный код ссылки замутить
# Koenig (01.02.2017 / 10:59)Верно. Сразу не сообразил, гг
ДоХтор, так вроде у тебя новый ббкод, а можно обычный код ссылки замутить