Неправильная обработка [code]

Проблемы с установкой или работой phpBB 2.0.x? Ищите ответы здесь!
Аватара пользователя
p00h
phpBB 1.4.4
Сообщения: 119
Стаж: 19 лет 10 месяцев
Откуда: Златоуст (Южный Урал)

Неправильная обработка [code]

Сообщение p00h »

Привет, коллеги!
Давно меня здесь не было :)
И конечно же пришел сразу с проблемой...

Короче, пишу код... к примеру:

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

eval( d );
Пост добавляется, отображается как надо.
Затем я опять захожу в тему, и опять пишу пост сразу за последним, т.е. срабатывает функция submit_merged_post из functions_post.php. Так вот, все амерсанды заменяются на &, поэтому скобочки (а также кавычки, спецсимволы теряются и приведенная строка выглядит как:

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

eval( d );
А вот на локалхосте у меня такой проблемы нету... Файлы идентичны! Есть ли соображения?
Аватара пользователя
Kuban
phpBB 1.4.2
Сообщения: 56
Стаж: 19 лет 3 месяца
Откуда: Комсомольск-на-Амуре
Благодарил (а): 8 раз
Поблагодарили: 1 раз

Сообщение Kuban »

Версия phpbb: 2.0.22
Версия PHP: 4.3.9
Версия MySQL: 4.0.26
После установки нескольких "незначительных" модов и устраннения "мелких" ошибок в сгенерированных страницах форума (лишние </td> и </table>) - перестал работать

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

 [code] 
[/code]. Пример, пытаюсь разместить пост со след. содержанием:

Есть несколько вариантов...
1.

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

<img src="путь к картинке.../картинка.jpg" alt="эта картинка">
будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка".
2.

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

<a href="http://www.kvvkus.org/"><img src="путь к картинке/картинка.gif" alt="эта картинка" width="100" height="70" border="1"></a>
будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка", а если нажать на неё - пойдешь по ссылке.

Результат постинга:

Есть несколько вариантов...
1. будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка".
2.

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

<a><img></a>
будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка", а если нажать на неё - пойдешь по ссылке.

Замена ..includes/bbcode.php на дистрибутивный от версии 2.0.22 не дала результата.
адрес форума
Логин: tester
Пароль: tester
содержание файлов форума предоставлю по первому требованию, заранее благодарен.
Последний раз редактировалось Kuban 15.03.2007 9:58, всего редактировалось 4 раза.
Аватара пользователя
/DiOs
Former team member
Сообщения: 1139
Стаж: 19 лет 2 месяца
Откуда: Ленинград

Сообщение /DiOs »

Ну я-то точно ничего не всосал (какое отношение

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

 имеет к <code> и тем более к <img>), за остальных -- не скажу.
И если я неправ, пусть старшие товарищи поправят меня
Аватара пользователя
Kuban
phpBB 1.4.2
Сообщения: 56
Стаж: 19 лет 3 месяца
Откуда: Комсомольск-на-Амуре
Благодарил (а): 8 раз
Поблагодарили: 1 раз

Сообщение Kuban »

Не буду объяснять, что не нашел тему с обсуждением неверной работы вв-code <code>

перебором выяснил, что текст:

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

Есть несколько вариантов...
1. [code]<img></img> src="путь к картинке.../картинка.jpg" border="1" alt="эта картинка">
будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка".
2.

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

<a></a> href="http://www.kvvkus.org/"><img src="путь к картинке/картинка.gif" alt="эта картинка" width="100" height="70" border="3"></a>
будет картинка в рамочке, при наведении на нее появится надпись: "эта картинка", а если нажать на неё - пойдешь по ссылке http://www.kvvkus.org[/code]
начитает отображаться правильно... где же "собака порылась" (самокритика пошла...)
Аватара пользователя
crash
Former team member
Сообщения: 6517
Стаж: 20 лет 9 месяцев
Откуда: Бердск

Сообщение crash »

Kuban писал(а):работы вв-code <code>
ббкод пишется в [ ]
Как правильно задавать вопросы
Для особо одаренных: поиск - это есть круто.
FAQ v.2 | FAQ v.3 | Шаблон запроса
Аватара пользователя
Kuban
phpBB 1.4.2
Сообщения: 56
Стаж: 19 лет 3 месяца
Откуда: Комсомольск-на-Амуре
Благодарил (а): 8 раз
Поблагодарили: 1 раз

Сообщение Kuban »

crash писал(а):ббкод пишется в [ ]
сори, конечно же в [], но, я написал часть html кода, выделил его

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

 [code] 
[/code], по идее что написал - то и должно отобразиться в этом случае, а у меня исчезла часть информации, как я понял за счёт того, что начало вв-code

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

 не начинает действовать...
Отключение в админке "Разрешить BBCode" - положительного результата не дает. Часть информации так же теряется.
Аватара пользователя
Палыч
Former team member
Сообщения: 9683
Стаж: 18 лет 11 месяцев
Откуда: Питер
Благодарил (а): 1 раз
Поблагодарили: 27 раз

Сообщение Палыч »

Kuban писал(а):где же "собака порылась"
Скорее, не учли какую-то вложенность bbcode
Не все то WINDOWS, что висит... phpBB только учусь.
ICQ, email, ЛС - только для личных сообщений. Вопросы по phpbb только на форумах. По найму не работаю.
Аватара пользователя
Kuban
phpBB 1.4.2
Сообщения: 56
Стаж: 19 лет 3 месяца
Откуда: Комсомольск-на-Амуре
Благодарил (а): 8 раз
Поблагодарили: 1 раз

Сообщение Kuban »

откатил этот файл на версию 2.0.19
includes/functions_post.php
стал текст отображаться верно.

операции обновления:

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

# 
#-----[ OPEN ]--------------------------------------------- 
# 
includes/functions_post.php

#
#-----[ FIND ]---------------------------------------------
# Line 44
		$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);

#
#-----[ REPLACE WITH ]---------------------------------------------
#
		// If HTML is on, we try to make it safe
		// This approach is quite agressive and anything that does not look like a valid tag
		// is going to get converted to HTML entities
		$message = stripslashes($message);
		$html_match = '#<[^\w<]*(\w+)((?:"[^"]*"|\'[^\']*\'|[^<>\'"])+)?>#';
		$matches = array();

		$message_split = preg_split($html_match, $message);
		preg_match_all($html_match, $message, $matches);

		$message = '';

		foreach ($message_split as $part)
		{
			$tag = array(array_shift($matches[0]), array_shift($matches[1]), array_shift($matches[2]));
			$message .= htmlspecialchars($part) . clean_html($tag);
		}

		$message = addslashes($message);

#
#-----[ FIND ]---------------------------------------------
# Line 153
					$temp_option_text[$option_id] = htmlspecialchars($option_text);

#
#-----[ REPLACE WITH ]---------------------------------------------
#
					$temp_option_text[intval($option_id)] = htmlspecialchars($option_text);

#
#-----[ FIND ]---------------------------------------------
# Line 816

		include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
	}
}


#
#-----[ AFTER, ADD ]---------------------------------------------
#
/**
* Called from within prepare_message to clean included HTML tags if HTML is
* turned on for that post
* @param array $tag Matching text from the message to parse
*/
function clean_html($tag)
{
	global $board_config;

	if (empty($tag[0]))
	{
		return '';
	}

	$allowed_html_tags = preg_split('/, */', strtolower($board_config['allow_html_tags']));
	$disallowed_attributes = '/^(?:style|on)/i';

	// Check if this is an end tag
	preg_match('/<[^\w\/]*\/[\W]*(\w+)/', $tag[0], $matches);
	if (sizeof($matches))
	{
		if (in_array(strtolower($matches[1]), $allowed_html_tags))
		{
			return  '</' . $matches[1] . '>';
		}
		else
		{
			return  htmlspecialchars('</' . $matches[1] . '>');
		}
	}

	// Check if this is an allowed tag
	if (in_array(strtolower($tag[1]), $allowed_html_tags))
	{
		$attributes = '';
		if (!empty($tag[2]))
		{
			preg_match_all('/[\W]*?(\w+)[\W]*?=[\W]*?(["\'])((?:(?!\2).)*)\2/', $tag[2], $test);
			for ($i = 0; $i < sizeof($test[0]); $i++)
			{
				if (preg_match($disallowed_attributes, $test[1][$i]))
				{
					continue;
				}
				$attributes .= ' ' . $test[1][$i] . '=' . $test[2][$i] . str_replace(array('[', ']'), array('[', ']'), htmlspecialchars($test[3][$i])) . $test[2][$i];
			}
		}
		if (in_array(strtolower($tag[1]), $allowed_html_tags))
		{
			return '<' . $tag[1] . $attributes . '>';
		}
		else
		{
			return htmlspecialchars('<' . $tag[1] . $attributes . '>');
		}
	}
	// Finally, this is not an allowed tag so strip all the attibutes and escape it
	else
	{
		return htmlspecialchars('<' .   $tag[1] . '>');
	}
}
сразу после замены данного файла на файл новой версии - начинается пропадание части текста сообщения.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
VVVas
Former team member
Сообщения: 4463
Стаж: 20 лет 5 месяцев
Поблагодарили: 1 раз

Сообщение VVVas »

bbcode.php советую проверить. и при обновлении с 20 на 21 ещё было небольшое изменение, проверьте, мало ли.
я люблю daft punk | новый sugoi.ru
Аватара пользователя
Kuban
phpBB 1.4.2
Сообщения: 56
Стаж: 19 лет 3 месяца
Откуда: Комсомольск-на-Амуре
Благодарил (а): 8 раз
Поблагодарили: 1 раз

Сообщение Kuban »

при замене только bbcode.php на версию 2.0.19 - проблема не исчезает, проблема получается существует только в functions_post.php.
оставил этот файл от версии 2.0.19, думаю, что это не смертельно!
буду разбираться далее, а тему можно удалить...

Добавлено спустя 2 часа 57 минут 40 секунд:

После установки в админке: Разрешить HTML - "Нет" - всё встало на свои места, пришёл к этому решению, прочитав комментарии из обновления до 2.0.20:

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

// If HTML is on, we try to make it safe 
// This approach is quite agressive and anything that does not look like a valid tag 
// is going to get converted to HTML entities 

Вернуться в «Поддержка phpBB 2.0.x»