регулярное выражение, чтобы обернуть тег img с помощью href, связанного с src - PullRequest
0 голосов
/ 19 ноября 2009

[Отредактировано - Извините Барт] Я смотрел на другие ответы, но изо всех сил пытался соответствовать этому. Я хочу обернуть тег изображения, где src является вторым атрибутом (после заголовка), с определенным тегом привязки, который содержит ссылку на изображение, найденное в src из тега изображения.

Пример тега img в строке. Это было введено через tinymce wysiwyg и всегда добавляет заголовок, затем src.

<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />

Мне нужно взять все это и завернуть в следующую строку:

<a href="event:images/expand/image.jpg"><img src=”images/image.jpg” /></a>

Изображение src указывает на миниатюру, и (Flash AS3 Event) появляется полноразмерная версия. Оба изображения имеют одинаковые имена, просто разные папки.

Вот полный пример строки, с которой нужно было бы выполнить регулярное выражение (из-за конфиденциальных данных я заменил текст на Lorem ipsum, но схема такая же!):

<p>Lorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit  
ametLoremipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>
<p>&nbsp;</p>
<p>Lorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem 
ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum 
dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor sit ametLorem ipsum dolor 
sit  
ametLorem ipsum dolor sit ametLorem ipsum dolor sit amet</p>
<p>&nbsp;</p>
<p><img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" 
alt="who_main_Layer_1.jpg" width="380" height="268" /></p>`

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

Ответы [ 3 ]

4 голосов
/ 19 ноября 2009

На подобные вопросы отвечали несколько раз, и ответ всегда один и тот же: не используйте регулярные выражения для изменения HTML . В PHP вы можете использовать расширения XPath и SimpleXml или DOMParser для решения этой проблемы.

Извините, что опубликовал так много ссылок на мои собственные ответы, но сами ответы и вопросы, на которые они отвечают, содержат много информации по этому вопросу.

3 голосов
/ 19 ноября 2009

Попробуйте этот код:

<?php
$str = '<img title="who_main_Layer_1.jpg" src="../../images/who_main_Layer_1.jpg" alt="who_main_Layer_1.jpg" width="380" height="268" />';

preg_match('#src="(?:.*/)?(.*?)"#', $str, $match);
$src = $match[1];
?>
<a href="event:images/expand/<?php echo $src; ?>"><img src=”images/<?php echo $src; ?>” /></a>

РЕДАКТИРОВАТЬ: другая версия для учета нескольких тегов в строке:

$replace = '<a href="event:images/expand/$1"><img src="images/$1" /></a>';
$str = preg_replace('#<\s*img.*?src="(?:[^"]+/)?(.*?)".*?>#s', $replace, $str);
0 голосов
/ 19 ноября 2009

Попробуйте это:

$newString = preg_replace('`<img([^>]*)src="\\.\\./\\.\\./images/([^"]+)"([^>])*>`','<a href="event:images/expand/$2"><img$1src="images/$2"$3></a>', $oldString);

Ограничения:

  • Это будет применять изменения в таких вещах, как <input value='<img src="../../images/test.jpg/>"'/>
  • Если " заменены на ' в ваших тегах img, вам придется изменить регулярное выражение
  • Он захлебнется такими вещами, как <img alt="6>5" src="../../images/test.png"/>

Я согласен с другими комментаторами, утверждающими, что регулярное выражение плохо анализировать HTML. Но здесь почти нет синтаксического анализа, и формат заменяемых элементов, похоже, находится под контролем (генерируется tinymce).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...