Я вывожу часть сообщений с форума на новостную ленту сайта.
Не разобрался какой функцией заменить теги BBcode на обычные хтмл...
насколько я понял, она должна быть в файле bbcode.php
т.е. мне нужно $text = функция($text)
также как функция для смайлов $text = smilies_pass($text);
Какая функция заменяет BBcode на HTML ?
-
- phpBB 1.0.0
- Сообщения: 4
- Стаж: 19 лет
- Откуда: Россия
-
- phpBB 1.0.0
- Сообщения: 4
- Стаж: 19 лет
- Откуда: Россия
-
- phpBB 1.4.0
- Сообщения: 39
- Стаж: 19 лет 3 месяца
Теги в квадратных скобках можно заменить на теги в угловых с помощью функции .
А теги вроде img и url, AFAIK, преобразовать можно с помощью регулярных выражений. Для ... что-то вроде:
Ну и так далее.
Код: Выделить всё
htmlspecialchars ()
А теги вроде img и url, AFAIK, преобразовать можно с помощью регулярных выражений. Для ... что-то вроде:
Код: Выделить всё
<?php
$text = "[url = http://...] ... [/url]";
$patern = "#\[[\s]*url[\s]*=[\s]*([^\]]*)\]([^\[]*)\[[\s]*/url[s]*\]#i;
$replacment = '<a href=\\1>\\2</a>';
echo preg_replace($patern, $replacment, $text);
?>
-
- phpBB Guru
- Сообщения: 5484
- Стаж: 21 год 1 месяц
- Поблагодарили: 2 раза
http://www.phpbbguru.net/community/viewtopic.php?t=5618
В этом же разделе... чуть ниже. Я понимаю - лень - двигатель прогресса. Но не до такой же степени.
В этом же разделе... чуть ниже. Я понимаю - лень - двигатель прогресса. Но не до такой же степени.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
-
- phpBB 1.0.0
- Сообщения: 4
- Стаж: 19 лет
- Откуда: Россия
Xpert, я видел тот топик, но не очень разобрался в изложенном там способе....
мой вопрос был в том, можно ли преобразовать BBcode в html аналогично тому как обрабатываются смайлы функцией
$text = smilies_pass($text);
мне сказали, что надо использовать функции:
prepare_bbcode_template($bbcode_tpl);
$text = bbencode_first_pass($text, $uid);
$text = bbencode_second_pass($text, $uid);
но таким образом я просто убирал BBcode, html вместо него не появлялся...,
поэтому я сделал свой неболшой обработчик тегов:
хотя таким способом неправильно заменяется тег SIZE, т.к. размеры шрифтов на форуме не совпадают с нормальными размерами html
Если все таки кто то может здесь написать правильную последовательность вызова функций из bbcode.php, буду очень признателен.
мой вопрос был в том, можно ли преобразовать BBcode в html аналогично тому как обрабатываются смайлы функцией
$text = smilies_pass($text);
мне сказали, что надо использовать функции:
prepare_bbcode_template($bbcode_tpl);
$text = bbencode_first_pass($text, $uid);
$text = bbencode_second_pass($text, $uid);
но таким образом я просто убирал BBcode, html вместо него не появлялся...,
поэтому я сделал свой неболшой обработчик тегов:
Код: Выделить всё
$bbcode = array('[b:]','[/b:]','[i:]','[/i:]','[u:]','[/u:]','[color','[size','[/color:]','[/size:]','[img:]','[/img:]','[url=','[/url]',':]',']');
$html = array('<b>','</b>','<i>','</i>','<u>','</u>','<font color','<font size','</font>','</font>','<img src="','">','<a target=_blank href=','</a>','>','>');
$text = str_replace($msg['bbcode_uid'],'',$text); // убираем uid`ы
$text = str_replace($bbcode, $html, $text); // меняем bbcode на html
$text = nl2br($text);
Если все таки кто то может здесь написать правильную последовательность вызова функций из bbcode.php, буду очень признателен.

-
- phpBB 1.4.4
- Сообщения: 149
- Стаж: 19 лет 8 месяцев
- Откуда: Киев
Код: Выделить всё
if ( !$board_config['allow_html'] )
{
$html_on = 0;
}
else
{
$html_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_html']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_html'] : $userdata['user_allowhtml'] );
}
if ( !$board_config['allow_bbcode'] )
{
$bbcode_on = 0;
}
else
{
$bbcode_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_bbcode']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_bbcode'] : $userdata['user_allowbbcode'] );
}
if ( !$board_config['allow_smilies'] )
{
$smilies_on = 0;
}
else
{
$smilies_on = ( $submit || $refresh ) ? ( ( !empty($HTTP_POST_VARS['disable_smilies']) ) ? 0 : TRUE ) : ( ( $userdata['user_id'] == ANONYMOUS ) ? $board_config['allow_smilies'] : $userdata['user_allowsmile'] );
}
Код: Выделить всё
$message = stripslashes($message);
$message = trim($message);
if ($html_on)
{
$allowed_html_tags = split(',', $board_config['allow_html_tags']);
$end_html = 0;
$start_html = 1;
$tmp_message = '';
$message = ' ' . $message . ' ';
while ($start_html = strpos($message, '<', $start_html))
{
$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $end_html + 1, ($start_html - $end_html - 1)));
if ($end_html = strpos($message, '>', $start_html))
{
$length = $end_html - $start_html + 1;
$hold_string = substr($message, $start_html, $length);
if (($unclosed_open = strrpos(' ' . $hold_string, '<')) != 1)
{
$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($hold_string, 0, $unclosed_open - 1));
$hold_string = substr($hold_string, $unclosed_open - 1);
}
$tagallowed = false;
for ($i = 0; $i < sizeof($allowed_html_tags); $i++)
{
$match_tag = trim($allowed_html_tags[$i]);
if (preg_match('#^<\/?' . $match_tag . '[> ]#i', $hold_string))
{
$tagallowed = (preg_match('#^<\/?' . $match_tag . ' .*?(style[\t ]*?=|on[\w]+[\t ]*?=)#i', $hold_string)) ? false : true;
}
}
$tmp_message .= ($length && !$tagallowed) ? preg_replace($html_entities_match, $html_entities_replace, $hold_string) : $hold_string;
$start_html += $length;
}
else
{
$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $start_html, strlen($message)));
$start_html = strlen($message);
$end_html = $start_html;
}
}
if (!$end_html || ($end_html != strlen($message) && $tmp_message != ''))
{
$tmp_message .= preg_replace($html_entities_match, $html_entities_replace, substr($message, $end_html + 1));
}
$message = ($tmp_message != '') ? trim($tmp_message) : trim($message);
}
else
{
$message = preg_replace($html_entities_match, $html_entities_replace, $message);
}
$bbcode_uid = ($bbcode_on) ? make_bbcode_uid() : '';
$message = trim($message);
if($bbcode_on && $bbcode_uid != '')
{
$message = bbencode_first_pass($message, $bbcode_uid);
}
updated
Добавлено спустя 6 минут 48 секунд:
в базу сохранять $message и $bbcode_uid
обратная обработка для вывода ббкода и смайликов в виде хтмл
Код: Выделить всё
$message = bbencode_second_pass($message, $bbcode_uid);
$message = smilies_pass($message);
$message = make_clickable($message);
$message = nl2br($message);
-
- phpBB 1.2.0
- Сообщения: 12
- Стаж: 19 лет
Код: Выделить всё
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);
include($phpbb_root_path . 'includes/bbcode.'.$phpEx);
$message = bbencode_second_pass($post_text, $bbcode_uid);
Что где не так?Fatal error: Call to a member function on a non-object in w:\home\localhost\www\forum\includes\bbcode.php on line 46
Объединение обманутых вклдачиков Сбербанка.
http://dcv.al.ru/
http://dcv.al.ru/