Перейти к публикации

Поломались местами теги [img] [/img] после перестроения


Рекомендованные сообщения

Заметил такое, что, скорей всего, после перестроения публикаций это произошло. Где-то процентов 20-30 новостей (от общего числа примерно 6400)  bbcode тег изображений конвертировался в html, причём не совсем корректно. Пример, допустим новость имеет заголовок Страница на дле , изображение вставлялось например так:

 

[center][img=http://musite.ru/uploads/posts/2009-11/kartinka.jpg][/center]

а теперь оно превратилось вот в это:

[center]<img src="http://musite.ru/uploads/posts/2009-11/kartinka.jpg" alt="'Страница" - title="'Страница" - />[/center]

То есть в альт и титл обрезался заголовок до первого слова и перед ним какая-то одинарная верхняя кавычка.  Причём никакой зависимости не обнаруживается, ничего общего между такими новостями нет, всё как-то хаотично, здесь изменилось, здесь не изменилось. Если по новой вставить картинки то так и остаётся как надо. DLE 11  Такие дела

Изменено пользователем keks88
Ссылка на сообщение
Поделиться на других сайтах

Чтобы найти зависимости, нужно видеть исходный код HTML новости до перестроения, не BB теги, а именно HTML код, который храниться в базе данных. Возможно она содержит некорректный код, например в момент первоначального создания новости, она создавалась с камими либо правками в парсере.

Ссылка на сообщение
Поделиться на других сайтах

если бы были правки в парсере, то все бы новости за тот период были такими, да и ничего особенного в создании не было, например одна картинка и текст. Всё. Да и на то пошло раньше dle сам трансформировал html в bbcode, а тут наоборот, вот что интересно

Ссылка на сообщение
Поделиться на других сайтах
5 часов назад, keks88 сказал:

если бы были правки в парсере, то все бы новости за тот период были такими

Не факт, зависит от самих правок.

 

5 часов назад, keks88 сказал:

Да и на то пошло раньше dle сам трансформировал html в bbcode, а тут наоборот, вот что интересно

Ничего наоборот нет и быть не может. DLE трансформирует HTML код обратно, только тот, который создан именно при помощи ББ тегов. Новости хранятся в БД именно в готовом HTML коде, а не в ББ тегов, поэтому конвертации наоборот быть не может.

Ссылка на сообщение
Поделиться на других сайтах

Посмотрел исходный код таблицы до перестроения, зависимость действительно какая-то есть. Не понятно, почему только одни картинки обрабатывались так, а другие по другому

 

Вот код сломавшейся картинки

<img src=\"/uploads/posts/2009-07/1246628129_mainpage.jpg\" alt=\'СРУБ СВОИМИ РУКАМИ\' title=\'СРУБ СВОИМИ РУКАМИ\' />

 

А вот которая не сломалась:

<img src=\"/uploads/posts/2009-07/1246577272_350x263x123pirania.jpg\" alt=\"В реках Волгоградской области появились пираньи\" title=\"В реках Волгоградской области появились пираньи\"  />

 

Добавлены новости были в один день

Ссылка на сообщение
Поделиться на других сайтах

Кажется нашёл ещё одну зависимость - поломались новости до   5 марта 2011 , с 6 марта уже нормальные, а до 5 марта которые не поломанные были редактированы ещё после этой даты, то есть пересохранены. То есть это либо версии до 9.2 или 9.3, после которых парсер стал работать как-то по другому

 

Цитата

Добавлены новости были в один день

но та которая не поломалась была отредактирована например  19.11.2011 !

 

То есть похоже что до версии 9.2 или 9.3 парсер обрабатывал картинки как то иначе

Изменено пользователем keks88
Ссылка на сообщение
Поделиться на других сайтах
10 часов назад, keks88 сказал:

Кажется я понял в чём дело, дело в скрипте. Берём файл parse.class.php от ДЛЕ 8.2, оттуда копируем: 


		if( $align != "left" and $align != "right" ) $align = '';
		
		if( preg_match( "/[?&;%<\[\]]/", $url ) ) {
			
			if( $align != "" ) return "[img=" . $align . "]" . $url . "[/img]";
			else return "[img=" . $url . "]";
		
		}
		
		$url = $this->clear_url( urldecode( $url ) );
		
		if( $url == "" ) return;
		
		if( $option[1] != "" ) {
			
			$alt = htmlspecialchars( strip_tags( stripslashes( $option[1] ) ), ENT_QUOTES, $config['charset'] );
			$alt = "alt=\"" . $alt . "\" title=\"" . $alt . "\" ";
		
		} else {
			
			$alt = htmlspecialchars( strip_tags( stripslashes( $_POST['title'] ) ), ENT_QUOTES, $config['charset'] );
			$alt = "alt='" . $alt . "' title='" . $alt . "' ";
		
		}

И заменяем в актуальной версии 


		if( $align != "left" and $align != "right" ) $align = '';

		if( preg_match( "/[?&;%<\[\]]/", $url ) ) {

			if( $align != "" ) return "[img=" . $align . "]" . $url . "[/img]";
			else return "[img=" . $url . "]";

		}

		$url = $this->clear_url( urldecode( $url ) );

		$info = $url;

		$info = $info."|".$align;

		if( $url == "" ) return;

		if( $option[1] != "" ) {

			$alt = htmlspecialchars( strip_tags( stripslashes( $option[1] ) ), ENT_QUOTES, $config['charset'] );
			$info = $info."|".$alt;
			$caption = "<span class=\"highslide-caption\">" . $alt . "</span>";
			$alt = "alt=\"" . $alt . "\" title=\"" . $alt . "\" ";

		} else {

			$alt = htmlspecialchars( strip_tags( stripslashes( $_POST['title'] ) ), ENT_QUOTES, $config['charset'] );
			$caption = "";
			$alt = "alt=\"" . $alt . "\" title=\"" . $alt . "\" ";

		}

Создаём новость с картинкой и видим исходный код в базе данных. Альт и титл с одинарными кавычками! Воозвращаем parse.class.php в исходное состояние, открываем редактирование новости - картинка поломана. Значит до ДЛЕ 8.2 включительно парсер создавал альт и титл с одинарными кавычками, и в 11 версии похоже это не учтено. Ну и вопрос, что можно сделать, чтобы поправить, хотя бы вручную методом пересохранения?

 

Ссылка на сообщение
Поделиться на других сайтах

Что то вы напутали с изменениями и правками, эти два участка кода от разных функций, которые обрабатывают совсем разные ББ теги. Видимо поэтому и проблема у вас, также ранее что-то некорректно правили в парсере, и он создал вам неправильный код, который не распознается оригинальной версией.

Ссылка на сообщение
Поделиться на других сайтах

Я парсер не трогал никогда, это сейчас ради проверки сделал. Значит вы хотите сказать, что вот эта часть кода взятая от 8.2, скачанная с вашего сайта,  обрабатывает не ББ теги картинок?

 

	function build_image($url = "", $align = "") {
		global $config;
		
		$url = trim( $url );
		$url = urldecode( $url );
		$option = explode( "|", trim( $align ) );
		$align = $option[0];
		$img_extra = " ";
		
		if( $align != "left" and $align != "right" ) $align = '';
		
		if( preg_match( "/[?&;%<\[\]]/", $url ) ) {
			
			if( $align != "" ) return "[img=" . $align . "]" . $url . "[/img]";
			else return "[img=" . $url . "]";
		
		}
		
		$url = $this->clear_url( urldecode( $url ) );
		
		if( $url == "" ) return;
		
		if( $option[1] != "" ) {
			
			$alt = htmlspecialchars( strip_tags( stripslashes( $option[1] ) ), ENT_QUOTES );
			$alt = "alt=\"" . $alt . "\" title=\"" . $alt . "\" ";
		
		} else {
			
			$alt = htmlspecialchars( strip_tags( stripslashes( $_POST['title'] ) ), ENT_QUOTES );
			$alt = "alt='" . $alt . "' title='" . $alt . "' ";
		
		}

Что тогда она обрабатывает? 

 

Интересует особенно вот это:

$alt = "alt='" . $alt . "' title='" . $alt . "' ";

вот они эти кавычки

 

Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, keks88 сказал:

Значит вы хотите сказать, что вот эта часть кода взятая от 8.2, скачанная с вашего сайта,  обрабатывает не ББ теги картинок?

То что вы привели сейчас это код обработки картинок, а то что ранее, один из вариантов, а именно второй не для обычных картинок.

9 минут назад, keks88 сказал:

вот они эти кавычки

Кавычки здесь совершенно не причем. Скрипт DLE обрабатывает одинаково что одинарными кавычками, что с двойными кавычками. Это вообще код перевода из ББ тегов, в HTML, а у вас не обрабатываются наоборот из HTML в ББ теги. У вас код остается в HTML, а должен в ББ код переводится.

Ссылка на сообщение
Поделиться на других сайтах
Только что, celsoft сказал:

Скрипт DLE обрабатывает одинаково что одинарными кавычками, что с двойными кавычками.

Попробовал с одинарными кавычками, они у меня сломались например

 

Вот этот код:

<img src="http://dle-news.ru/templates/Default/images/box.jpg" alt='DataLife Engine' - title='DataLife Engine' - />

 

Стал таким:

<img src="http://dle-news.ru/templates/Default/images/box.jpg" alt="'DataLife" - title="'DataLife" - />

 

Ссылка на сообщение
Поделиться на других сайтах

Нет, одинарные кавычки, они и должны ломаться, потому как это некорректный с точки зрения парсера HTML код, кавычки согласно стандартнам должны быть двойными. Но вы же публиковали ББ код, и соответственно он должен обраться переводиться в ББ код, в котором нет ни двойных ни одинарных кавычек, а этого у вас не происходит. Вот в чем проблема, проблема в том что ваш HTML не возвращается в ББ код. Понимаете? Т.е. проблема заключается не в кавычках, а в том что HTML не переходит в ББ теги, где кавычек уже нет. Если код у вас этот добавлялся не при помощи ББ тегов, а в виде чистого HTML, то повреждение конечно будет, потому как он не валиден.

Ссылка на сообщение
Поделиться на других сайтах
Только что, celsoft сказал:

У вас код остается в HTML, а должен в ББ код переводится.

Он и был ББкод до перестроения, версия 8.2 создавала титлы и альты с одинарными кавычками в базу данных, после перестроения сейчас они сломались. В моём пятом сверху комментарии я же привёл пример то что сломалось а что нет, и там где сломалось стоят одинарные кавычки, которые создавал парсер 8.2

Только что, celsoft сказал:

Вот в чем проблема, проблема в том что ваш HTML не возвращается в ББ код. Понимаете?

Он не возвращается, потому что сломался после перестроения

 

У меня только одно предложение, установить 8.2, добавить картинку, обновить до 11 и посмотреть что с ней будет

Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, celsoft сказал:

одинарные кавычки, они и должны ломаться, потому как это некорректный с точки зрения парсера HTML

С точки зрения простого человека, они должны конвертироваться в двойные, а не ломаться, что и было на последующих версиях, что и обьясняет то, что новости которые были отредактированы они не сломались, так как кавычки стали двойными. Я этого конечно не мог видеть какие там кавычки, всё всплыло только сейчас

 

И вообще дело не в ББ коде и не в штмль коде и как оно выглядит при редактировании, а в том что альт и титл стали обрезанными до первого слова

Изменено пользователем keks88
Ссылка на сообщение
Поделиться на других сайтах
12 минуты назад, keks88 сказал:

а не ломаться, что и было на последующих версиях

Никогда такого не было. Всегда для чистого HTML требовались именно двойные кавычки, начиная с самой первой версии DLE, это я могу сказать точно.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...