Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BBcode разбор 
V
    Опции темы
S.A.P.
Дата 7.5.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2664
Регистрация: 11.6.2004

Репутация: нет
Всего: 71



Цитата(kvv @  7.5.2006,  05:55 Найти цитируемый пост)
Ну хотя-бы работает. Всем спасибо.  
 это я привел для примера. Для рабочего решения это явно не катит, т.к. существует проблема с кавычками. С рекурсивными регами у меня ничего не вышло (может при замене они не работают?). 

Если собираешься использовать ручную рекурсию, то советую разобраться и переделать код на preg_replace_callback.
  

Это сообщение отредактировал(а) S.A.P. - 7.5.2006, 16:11
PM MAIL   Вверх
kvv
Дата 7.5.2006, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Не пойму вас.
Мне тот вариант понравился. Вроде все работает.
Смысла в preg_replace_callback() не увидел, ведь это тоже самое получается...  Может, я что-то там не понимаю?

Код
<?php
function BBCode($str)
{
    return preg_replace("#\[(b|i|u)+\](.+?)\[/\\1\]#ies","'<$1>'.BBCode('$2').'</$1>'",$str);
}

$txt='
[b] [i] ttt [/i] [/b]
[b] [i] ttt [/b] [/i]
[b] [i] [u] ttt [/u] [/i] [/b]
[b] [i] [u] ttt [/u] [/b] [/i]
[b] [i] [u] ttt [/u] [/u] [/u]
[b] [i] [u] ttt [/b] [/u] [/i]';
echo nl2br(htmlspecialchars(BBCode($txt)));
?>

Код
<b> <i> ttt </i> </b>
<b> [i] ttt </b> [/i]
<b> <i> <u> ttt </u> </i> </b>
<b> [i] <u> ttt </u> </b> [/i]
<b> [i] <u> ttt </u> [/u] [/u]
[b] [i] [U] ttt </b> [/U] [/i]
  

Это сообщение отредактировал(а) kvv - 7.5.2006, 16:46
PM MAIL   Вверх
Mal Hack
Дата 7.5.2006, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Хм... Что-то через рекурсию внутри шаблонов у меня не получилось. Сделал вот так:
Код
<?php
function BBCode($str,$str2="",$str3="")
{
    if( isset($str2) && isset($str3) )
    {
    $str = "<".$str.">".$str2."</".$str.">".$str3;
        
        
    }
    return preg_replace("#\[(b|i|u)+\](.+?)\[/\\1\](.*?)$#ies","BBCode('$1','$2','$3')",$str);
}
$txt='
[b] [i] ttt [/i] [/b]
[b] [i] ttt [/b] [/i]
[b] [i] [u] ttt [/u] [/i] [/b]
[b] [i] [u] ttt [/u] [/b] [/i]
[b] [i] [u] ttt [/u] [/u] [/u]
[b] [i] [u] ttt [/b] [/u] [/i]';
echo nl2br(htmlspecialchars(BBCode($txt)));
?>
 
PM ICQ   Вверх
kvv
Дата 8.5.2006, 05:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Эм... непонял. Мы берем тег в квадратных скобках, в BBCode() он оказывается в переменной $str - и потом в нем мы опять ищем рег?

Код
<?php
function BBCode($str,$str2="",$str3="")
{
    if( isset($str2) && isset($str3) )
    {
    $str = "<".$str.">".$str2."</".$str.">".$str3;
        
        
    }
    return preg_replace("#\[(b|i|u)+\](.+?)\[/\\1\](.*?)$#ies","BBCode('$1','$2','$3')",$str);
}
$txt=Array(
'[b] [i] ttt [/i] [/b]',
'[b] [i] ttt [/b] [/i]',
'[b] [i] [u] ttt [/u] [/i] [/b]',
'[b] [i] [u] ttt [/u] [/b] [/i]',
'[b] [i] [u] ttt [/u] [/u] [/u]',
'[b] [i] [u] ttt [/b] [/u] [/i]'
);
foreach($txt as $key => $value)
{
    echo htmlspecialchars(BBCode($value)).'<br>';
}
?>

Выдает:
Код
<<b> <i> ttt </i> </b>></<b> <i> ttt </i> </b>>
<<b> <i> ttt </b> </i>></<b> <i> ttt </b> </i>>
<<b> <i> <u> ttt </u> </i> </b>></<b> <i> <u> ttt </u> </i> </b>>
<<b> <i> <u> ttt </u> </b> </i>></<b> <i> <u> ttt </u> </b> </i>>
<[b] [i] <u> ttt </u> [/u] [/u]></[b] [i] <u> ttt </u> [/u] [/u]>
<<b> <i> <u> ttt </b> </u> </i>></<b> <i> <u> ttt </b> </u> </i>>

Ну так и есть... Получились теги в тегах%) 
PM MAIL   Вверх
Mal Hack
Дата 8.5.2006, 12:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Цитата(kvv @  8.5.2006,  05:28 Найти цитируемый пост)
Ну так и есть... Получились теги в тегах%)

А как надо?

Цитата(kvv @  8.5.2006,  05:28 Найти цитируемый пост)
Мы берем тег в квадратных скобках, в BBCode() он оказывается в переменной $str - и потом в нем мы опять ищем рег?

Другого выхода я пока не вижу, т.к. рекурсивные шаблоны у меня не стали работать. 
PM ICQ   Вверх
kvv
Дата 8.5.2006, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Цитата(Mal Hack @  8.5.2006,  13:44 Найти цитируемый пост)
А как надо?

Мой второй пост сверху - там как раз получилось как надо. Ведь самое главное - чтоб не было перекрывания тегов, то есть ситуаций типа <b><i>smth</b></i> 
PM MAIL   Вверх
Mal Hack
Дата 8.5.2006, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Код
<?php
function BBCode($str,$str2="",$str3="")
{
    if( isset($str2) && isset($str3) )
    {
    $str = "<".$str.">".$str2."</".$str.">";
        
        
    }
    return preg_replace("#\[(b|i|u)+\](.+?)\[/\\1\]#ies","BBCode('$1','$2')",$str);
}
$txt='
[b] [i] ttt [/i] [/b]
[b] [i] ttt [/b] [/i]
[b] [i] [u] ttt [/u] [/i] [/b]
[b] [i] [u] ttt [/u] [/b] [/i]
[b] [i] [u] ttt [/u] [/u] [/u]
[b] [i] [u] ttt [/b] [/u] [/i]';
echo nl2br(htmlspecialchars(BBCode($txt)));
?>
 
PM ICQ   Вверх
kvv
Дата 8.5.2006, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 4.5.2006

Репутация: нет
Всего: нет



Mal Hack, 
Мы друг друга не понимаем%) Уже ж все получилось - чего еще париться то?
Предлагаешь ты все ту же рекурсию - скорость парсинга не увеличивается.
Да и что-то ты не то в последнем коде делаешь... Третья переменная в функцию не передается, а ты ее иссетом проверяешь... И выводит он совем не то. 
PM MAIL   Вверх
Mal Hack
Дата 8.5.2006, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 16
Всего: 261



Тогда не понимаю в чем проблема?
Вот подправленный:
Код

<?php
function BBCode($str)
{

    return preg_replace("#\[(b|i|u)+\](.+?)\[/\\1\]#ies","'<$1>'.BBCode('$2').'</\\1>'",$str);
}
$txt='
[b] [i] ttt [/i] [/b]
[b] [i] ttt [/b] [/i]
[b] [i] [u] ttt [/u] [/i] [/b]
[b] [i] [u] ttt [/u] [/b] [/i]
[b] [i] [u] ttt [/u] [/u] [/u]
[b] [i] [u] ttt [/b] [/u] [/i]';
echo nl2br(htmlspecialchars(BBCode($txt)));
?>
 
PM ICQ   Вверх
BobiKK
Дата 11.5.2006, 18:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 655
Регистрация: 1.12.2005
Где: Essen, Deutschlan d

Репутация: нет
Всего: 16



Кстати, а это никто не пробовал? http://pear.php.net/package/HTML_BBCodeParser 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0687 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.