Я пытаюсь сделать простой скрипт php, чтобы найти все атрибуты src из всех изображений в html-тексте, а затем заменить все найденные srcs на некоторый текст после внесения некоторых условных изменений.
Что-то вроде этого:
@preg_match_all('/<img\s src="([a-zA-Z0-9\.;:\/\?&=_|\r|\n]{1,})"/isxmU', $body, $images);
теперь у меня все srcs в переменной $ images, теперь я делаю:
foreach ($images as $img) { ..my changes here.. }
и теперь … как я могу восстановить измененные srcs в переменную $ body снова?
Спасибо заранее,
Вместо этого используйте парсер HTML DOM, гораздо проще в использовании и обслуживании http://simplehtmldom.sourceforge.net/
Вы должны заглянуть в preg_replace_callback()
, который позволит вам выполнить постобработку каждого матча, как вам нравится, используя функцию обратного вызова. (Вы бы использовали его вместо preg_match_all()
, а не в дополнение к нему.)
Вчера я задал вопрос о хорошем интерфейсе для изменения и перемещения файлов HTML. Вам может быть интересно:
Порт jQuery для PHP
Это может быть хорошей альтернативой, если вы уже знакомы с API jQuery.
Недействительный синтаксический анализатор может быть еще лучше, если вам нужно работать с плохо сформированным HTML.
Я думаю, что самый простой ответ, который вы ищете, – это сделать str_replace.
foreach ($images as $img) { ..my changes here.. $body = str_replace($original_string, $modified_string, $output_body); }
Не хотите, чтобы вы использовали preg_replace
? С помощью модификатора e
текст замены имеет значение eval
'd, поэтому вы можете иметь функцию, которая выполняет на заменяемом тексте ту же самую вещь, которую вы бы сделали в вашем цикле foreach
.
EDIT: preg_replace_callback
чище, чем с помощью e
модификатора с preg_replace
, не думал об этом при написании моего anser, поэтому лучше ответить на хаос.