Регулярное выражение для изменения <img> относительные URL к абсолютным

Мне нужно заглянуть внутрь строки HTML и изменить все<img> теги, гдеsrc Атрибут является относительным адресом, к абсолютному URL. Итак, это:

<code><img src="puppies.jpg">
</code>

должен стать:

<code><img src="http://sitename.com/path/puppies.jpg">
</code>

игнорируя<img> теги которыхsrc атрибут уже абсолютный.

Я использую PHP и предполагаю, что мне нужно выполнить это черезpreg_replace(), Помогите! И спасибо!

 Madara Uchiha♦30 апр. 2012 г., 21:09
Это для JavaScript, но принцип тот же.
 Ja͢ck30 апр. 2012 г., 21:09
Попробуйте использовать класс DomDocument вместо preg для выполнения HTML-вещей.
 Madara Uchiha♦30 апр. 2012 г., 21:08

Ответы на вопрос(2)

Решение Вопроса

not работа для регулярного выражения. работа парсера XML / DOM.

Я бы дал DOMDocument шанс.

$DOM = new DOMDocument;
$DOM->loadHTML($html);

$imgs = $DOM->getElementsByTagName('img');
foreach($imgs as $img){
    $src = $img->getAttribute('src');
    if(strpos($src, 'http://sitename.com/path/') !== 0){
        $img->setAttribute('src', "http://sitename.com/path/$src");
    }
}

$html = $DOM->saveHTML();
 30 апр. 2012 г., 21:16
@Jack: Хорошая идея, изменилась :-P
 30 апр. 2012 г., 21:12
Я проголосовал, но это также нуждается в проверкеsrc атрибуты, которые уже являются абсолютными, согласно ОП.
 30 апр. 2012 г., 21:12
@Mathletics: Ах да, не заметил, я могу добавить, что :-P
 30 апр. 2012 г., 21:13
+1, хотя я бы использовал getElementsByTagName вместо xpath
 Sam01 мая 2012 г., 03:56
Ура! Это делает это! Вопрос: возвращаемый HTML-код автоматически получает теги & lt; doctype & gt ;, & lt; html & gt ;, & lt; body & gt ;, etc .... Есть ли способ отключить это? Все, что я хочу, - это то, что я дал, чтобы начать ... просто с выполненной части поиска и замены. Имеет ли это смысл?

s a job for an XML/DOM parser.

Нет, это не так. Если вы просто хотите добавить префикс к каждому атрибуту src, лучше всего использовать простые строковые функции и даже не думать о разборе xml, regex или dom & # x2026;

$str = str_replace('<img src="', '<img src="http://prefix', $str);

Вы можете убрать неправильные ссылки (уже абсолютные) впоследствии

$str = str_replace('<img src="http://prefixhttp://', '<img src="http://', $str);

Не взрывайте свой код с помощью regexp / dom, если вы можете избежать этого.

 01 мая 2012 г., 02:38
неправильные ссылки могут быть легко исправлены:str_replace('prefixprefix', 'prefix', $str) str_replace('http://prefix/http://', 'http://', $str)  не взрывайте свой код с помощью regex / dom, если вам не нужно & # x2026;
 30 апр. 2012 г., 21:15
Что произойдет, если мой HTML был<img class='animals' src='puppies.jpg' />?
 Sam07 июл. 2012 г., 03:29
@ semu, я полностью с тобой в этом. Заthis у экземпляра (и у меня) нет причин добавлять все виды ненужных накладных расходов, когда существует простое решение ... хотя и не самое изящное, оно определенно выполняет свою работу.
 01 мая 2012 г., 02:35
@Rocket извините, но он сказал, что его HTML<img src="puppies.jpg">
 30 апр. 2012 г., 21:22
Где в этом коде вы будете проверять относительные URL?

Ваш ответ на вопрос