Как показать ошибку, если ссылка в теге [img] ведёт уже на не существующий файл?

Автор APominov, 16 августа 2026, 18:56:29

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

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

APominov

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

Я перевел свой форум с Punbb 1.4 на SMF 2.1.7.

Например на punbb в сообщениях было когда то размещено изображение в теге [ img ] где ссылка ведет на любой сайт, но файл со временем был удален. То в сообщении вместо картинки выводилась иконка и сама ссылка на изображение. И сразу понимаешь что картинка не доступна. Можно отредактировать ссылку или удалить.
Тут кстати тоже подставляться эта иконка "" но только при редактировании сообщения, но после сохранения пустота.

В  моем SMF 2.1.7. - в редакторе она не заменяется т.е. остается ссылка с тегом, а при сохранении в сообщении тоже пусто. Если сообщения старые, то даже не поймешь было ли в этом сообщении изображение(я). Это крайне не удобно.

Пробовал в .htaccess добавить правило
RewriteEngine On
RewriteRule \.(jpe?g|gif|bmp|png|webp)$ my_images/image-not-found.png [L]
и подобные другие.
Но заглушка image-not-found.png выводится только, если ссылка на изображение на том же url, что и сам форум SMF, а на внешние url не реагирует.

ПОМОГИТЕ.
Не могу понять от куда подставляется эта иконка. С сервера чтоли... Потому что ее нет в коде.
Как показывать эту иконку или свою заглушку/текст в размещенных сообщениях, вместо изображений в тегах [img], которые более не доступны по указанным там ссылкам (как на внутренний так и внешний url)?

HSTQ

Ваш .htaccess здесь не сработает: внешнюю картинку браузер запрашивает прямо с чужого сервера. Можно обработать событие error у изображений внутри поста и показать подпись «Изображение недоступно» со ссылкой на исходный адрес.

Сам BBCode в базе менять не нужно: сбой может оказаться временным или связанным с запретом загрузки с другого сайта. Обработчик лучше назначать самим img, поскольку error не всплывает. Если подставляете картинку-заглушку, сначала снимите обработчик, иначе при ошибке загрузки самой заглушки получится цикл.
HSTQ — хостинг, VPS, выделенные серверы и IPv4
VPS и хостинг: 6 месяцев + 6 в подарок
Выбрать VPS • Хостинг • Аренда серверов • Аренда IPv4

APominov

Цитата: HSTQ от 01 октября 2026, 07:34:42Ваш .htaccess здесь не сработает: внешнюю картинку браузер запрашивает прямо с чужого сервера. Можно обработать событие error у изображений внутри поста и показать подпись «Изображение недоступно» со ссылкой на исходный адрес.

А как это реализовать?

Цитата: HSTQ от 01 октября 2026, 07:34:42Сам BBCode в базе менять не нужно: сбой может оказаться временным или связанным с запретом загрузки с другого сайта. Обработчик лучше назначать самим img, поскольку error не всплывает. Если подставляете картинку-заглушку, сначала снимите обработчик, иначе при ошибке загрузки самой заглушки получится цикл.
Получается что обработчик ссылок с ббкодом img в SMF 2.1.7 не выдает стандартную заглушку, если ссылка не рабочая? Можно как то исправить это?

HSTQ

В JS темы, после построения страницы, можно начать с такого варианта:

document.querySelectorAll('img.bbc_img').forEach(img => {
  const fallback = () => img.replaceWith(
    document.createTextNode('[Изображение недоступно]')
  );
  img.addEventListener('error', fallback, { once: true });
  if (img.complete && !img.naturalWidth) fallback();
});

Проверка complete нужна для ошибок, случившихся до подключения обработчика
HSTQ — хостинг, VPS, выделенные серверы и IPv4
VPS и хостинг: 6 месяцев + 6 в подарок
Выбрать VPS • Хостинг • Аренда серверов • Аренда IPv4

APominov

Цитата: HSTQ от 08 октября 2026, 14:58:40В JS темы, после построения страницы, можно начать с такого варианта:
Был бы благодарен, если бы уточнили в какой файл и в какое место вставить этот код js-скрипта. Я то со скриптами я не очень дружу.