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