Я пытаюсь сделать простой скрипт 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, поэтому лучше ответить на хаос.