PHP заменить текст в переменной - PullRequest
0 голосов
/ 04 июля 2010

$image переменная дает этот код (когда используется echo):

<img src="/image.png" width="100" height="147" alt="" class="some_class" />
  • width, height, src и class атрибуты могут быть разными.

Что нам делать:

  1. удалить width и height из $image
  2. заменить alt="" на alt="Poster"

Спасибо.

Ответы [ 4 ]

1 голос
/ 04 июля 2010
$pattern = '/alt="" width="\d+" height="\d+"/i';
$replacement = 'alt="Poster"';
$variable = preg_replace($pattern, $replacement, $variable);

исправлена ​​работа с любым порядком атрибутов (комментарий Гордона):

$pattern = '/alt=""/i';
$replacement = 'alt="Poster"';
$variable = preg_replace($pattern, $replacement, $variable);
$pattern = '/width="\d+"/i';
$replacement = '';
$variable = preg_replace($pattern, $replacement, $variable);
$pattern = '/height="\d+"/i';
$replacement = '';
$variable = preg_replace($pattern, $replacement, $variable);
1 голос
/ 04 июля 2010

Я бы использовал регулярные выражения для этого.

// Replace width="..." and height="..." with nothing
$variable = preg_replace('/(width|height)\s*=\s*"[^"]*"/i', '', $image);

// Replace alt="..." with alt="Poster"
$variable = preg_replace('/alt\s*=\s*"[^"]*"/i', 'alt="Poster"', $variable);

Этот метод не зависит от порядка атрибутов, каковы некоторые другие ответы.Также обратите внимание, что второе регулярное выражение заменит alt="<any string here>" на alt="Poster".Должно быть достаточно легко изменить его, чтобы заменить только alt="".

1 голос
/ 04 июля 2010

Если атрибуты могут быть переменными, то для работы с HTML лучше всего использовать библиотеку, которая действительно понимает HTML, например DOM .

$dom = new DOMDocument;
$dom->loadXML($variable);
$dom->documentElement->removeAttribute('width');
$dom->documentElement->removeAttribute('height');
$dom->documentElement->setAttribute('alt', 'poster');
echo $dom->saveXML($dom->documentElement);

выходы:

<img src="http://site.com/image.png" alt="poster"/>
0 голосов
/ 14 апреля 2012

также заменит <embed width="x">, что неправильно. Нам нужно ловить только с <img> тегом

...