Ad Management: неправильное сохранение пустой ссылки в PHP формате

Автор Slavegirl, 02 марта 2013, 12:09:03

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

Slavegirl

Здравствуйте!

Столкнулась вчера с непонятным для меня поведением мода AdManagement (версия 3.0.1). При сохранении следующего кода в формате PHP он автоматически изменяется и сохраняется в базе данных с неверными данными:

Оригинальный код:

$SiteLink = 'http://site.com/';
echo '<a href="', $SiteLink, '" target="_blank">Site</a>';


Этот же код после сохранения объявления и повторного открытия:

$SiteLink = 'http://site.com/';
echo '<a href="http://[censored]/', $SiteLink, '" target="_blank">Site</a>';


В итоге ссылка становится нерабочей: http://[censored]/http://site.com/

Автозамена не происходит, если код подать в следующем виде:


echo '<a href', '="', $SiteLink, '" target="_blank">Site</a>';


До сих пор не поняла, в чем кроется причина такого поведения мода.
Заранее большое спасибо за любые советы по данному вопросу!

GeorG

Проверил у себя, никакой автоматической замены, не происходит. Видимо что-то ещё у вас влияет...
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Slavegirl

#2
Немного шире исследовала проблему. Сразу после создания рекламного блока в базу данных сохраняется оригинальный код, все ссылки работают. Но стоит открыть окно изменения кода (Edit Add), как он уже в поле редактирования загружается измененный, при этом оставаясь в базе данных нетронутым. Если нажать сохранить, код с авто заменой уже попадает в базу данных и ссылки перестают работать.

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

Избежать автозамены получилось также с помощью такого вида ссылки:


<a href = "http://site.com/">Site</a>


Надеюсь то, что между атрибутом href и его параметром стоят 2 пробела, это нормально.

GeorG

Такую замену, можно через буфер сделать. Как вариант, вам какой-то мод на хуках так безобразничает.
Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

Slavegirl

#4
GeorG, спасибо за подсказку возможной причины. Только я даже представить не могу, какой из модов способен на подобные безобразия.
Единственное, что приходит на ум, это связь между функциями escapestring__recursive, stripslashes__recursive, magic_quotes и обновлением версии PHP до последней. Хотя я и раньше замечала, что Ad Management модифицирует текст при сохранении/редактировании, но не придавала этому большого значения.

Проблема явно не только в моде рекламы. Создала на форуме обычное сообщение, изменила в базе данных его тело на следующее:


$SiteLink = 'http://site.com/';
echo '<a href="' , $SiteLink, '">Site</a>';


При нажатии на кнопку "Редактировать" в сообщении открывается оригинальный код. Но если выбрать "Быстрая правка", в текстовом поле уже видоизмененный код как и в случае с рекламным блоком.

Удалось выяснить, что при создании обычного сообщения его текст проходит некую фильтрацию и, например, одинарная кавычка в базу сохраняется в виде кода '
В то время, как Ad Management весь текст сохраняет "как есть". Возможно именно поэтому возникают подобные автозамены в html-интерпретаторе.