замена всех тегов src изображения в тексте HTML - PullRequest
1 голос
/ 01 сентября 2009

Я пытаюсь создать простой скрипт 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 ??

заранее большое спасибо,

Ответы [ 6 ]

5 голосов
/ 01 сентября 2009

Вам следует заглянуть в preg_replace_callback(), что позволит вам постобрабатывать каждое совпадение по своему усмотрению, используя функцию обратного вызова. (Вы бы использовали его вместо preg_match_all(), а не в дополнение к нему.)

4 голосов
/ 01 сентября 2009

Вместо этого используйте HTML DOM-парсер, намного проще в использовании и обслуживании http://simplehtmldom.sourceforge.net/

1 голос
/ 02 сентября 2009

Вчера я задал вопрос о хорошем интерфейсе для изменения и просмотра HTML-файлов. Вы можете быть заинтересованы в этом:

jQuery порт для PHP

Это может быть хорошей альтернативой, если вы уже знакомы с API jQuery.

0 голосов
/ 01 сентября 2009

Не проверяющий парсер может быть даже лучше, если вам нужно работать с плохо сформированным HTML.

http://pear.php.net/package/XML_HTMLSax3

0 голосов
/ 01 сентября 2009

Я думаю, что самый простой ответ, который вы ищете, это сделать str_replace.

foreach ($images as $img) {
    ..my changes here..
    $body = str_replace($original_string, $modified_string, $output_body);
}
0 голосов
/ 01 сентября 2009

Не то, что вы хотите использовать preg_replace? С модификатором e замещающий текст равен eval, поэтому у вас может быть функция, которая выполняет для заменяемого текста то же самое, что вы делали бы в цикле foreach.

РЕДАКТИРОВАТЬ: preg_replace_callback чище, чем использование модификатора e с preg_replace, не думал об этом во время написания моего ансера, поэтому ответ хаос лучше.

...