Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Какая функция заменяет BBcode на HTML ?

Форум для авторов модов для phpBB 2.0.x.
Valtasar
phpBB 1.0.0
Сообщения: 4
Стаж: 18 лет
Откуда: Россия

Какая функция заменяет BBcode на HTML ?

Сообщение Valtasar »

Я вывожу часть сообщений с форума на новостную ленту сайта.
Не разобрался какой функцией заменить теги BBcode на обычные хтмл...
насколько я понял, она должна быть в файле bbcode.php

т.е. мне нужно $text = функция($text)
также как функция для смайлов $text = smilies_pass($text);
Valtasar
phpBB 1.0.0
Сообщения: 4
Стаж: 18 лет
Откуда: Россия

Сообщение Valtasar »

гмм, никто не знает? :(
CURANS
phpBB 1.4.0
Сообщения: 39
Стаж: 18 лет 2 месяца

Сообщение CURANS »

Теги в квадратных скобках можно заменить на теги в угловых с помощью функции

Код: Выделить всё

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);
?>
Ну и так далее.
Xpert
phpBB Guru
phpBB Guru
Сообщения: 5484
Стаж: 20 лет 1 месяц
Поблагодарили: 2 раза

Сообщение Xpert »

http://www.phpbbguru.net/community/viewtopic.php?t=5618
В этом же разделе... чуть ниже. Я понимаю - лень - двигатель прогресса. Но не до такой же степени.
Эксперт - это человек, который избегает мелких ошибок на пути к грандиозному провалу.
Любая более-менее сложная задача имеет несколько простых, изящных, лёгких для понимания неправильных решений
Valtasar
phpBB 1.0.0
Сообщения: 4
Стаж: 18 лет
Откуда: Россия

Сообщение Valtasar »

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 вместо него не появлялся...,

поэтому я сделал свой неболшой обработчик тегов:

Код: Выделить всё

$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);
хотя таким способом неправильно заменяется тег SIZE, т.к. размеры шрифтов на форуме не совпадают с нормальными размерами html

Если все таки кто то может здесь написать правильную последовательность вызова функций из bbcode.php, буду очень признателен. :?
Аватара пользователя
Crow
phpBB 1.4.4
Сообщения: 149
Стаж: 18 лет 8 месяцев
Откуда: Киев

Сообщение Crow »

Код: Выделить всё

      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);
			}
Добавлено спустя 9 часов 46 минут 56 секунд:

updated

Добавлено спустя 6 минут 48 секунд:

в базу сохранять $message и $bbcode_uid


обратная обработка для вывода ббкода и смайликов в виде хтмл

Код: Выделить всё

$message = bbencode_second_pass($message, $bbcode_uid);
$message = smilies_pass($message);
$message = make_clickable($message);
$message = nl2br($message);
функции из bbcode.php и functions_post.php
svtol
phpBB 1.2.0
Сообщения: 12
Стаж: 18 лет

Сообщение svtol »

Код: Выделить всё

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/

Вернуться в «Для авторов (phpBB 2.0.x)»