Preg заменить все IMG, когда SRC не на пример домена

0

У меня проблема с preg_replace, у моей функции есть ошибка, и я не знаю, где. Мне нужно удалить из массива все изображения, у которых есть источник, отличный от моего основного домена.

Это моя функция:

$aPatterns = array (
(...),
'#<img[^>]+src="(?!http://example.com/emoticon/(example|emot|name).gif)[^\s]+"[^>]+>#is',
(...));

$aReplecements = array(
(...),
'',
(...)
);

$contentOut = preg_replace($aPatterns,$aReplecements,$content);

Если тег img не закрыт или не имеет знака двойных кавычек, в конце функции атрибута src не работает, не изменяется пустая строка.

Я не знаю, что в этом выражении не так, надеюсь, и я рассчитываю на вашу помощь.

С Уважением,

  • 0
    Извините, не уверен, но: вы имеете в виду, что когда у вас есть что-то вроде <img src="http://exammple.com/emoticon/example.gif"> это работает, но когда у вас есть <img src=http://exammple.com/emoticon/example.gif> это не работает?
  • 0
    Да, и я не знаю, в чем проблема.
Теги:
image
preg-replace

1 ответ

0
Лучший ответ

Итак, проблема в том, что вы явно указано, что должно быть " и > в конце URL - адреса (вы также четко указано, что там должно быть открытие " в начале URL после src= так если бы этого не было, это тоже не сработало бы).

Вы можете исправить это поведение, делая " и > по желанию, добавляя ? Знак после них.

#<img[^>]+src="?(?!http://example.com/emoticon/(example|emot|name).gif)[^\s]+"?[^>]+>?#is

Заметьте, я добавил ? после первого " в начале рисунка.

Предупреждение

Выполнение этого происходит со своими собственными проблемами, например: [^>] будет соответствовать любому символу, который не является > поэтому он мог бы соответствовать концу строки, и поэтому вы могли бы потерять всю оставшуюся строку из своего вывода (в зависимости от ваших замен и т.д.)...

Есть ли причина, по которой a > не будет присутствовать?

  • 1
    Это работа, спасибо :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню