2010-07-04 4 views
0

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

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

Что мы должны сделать:

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

Спасибо.

+0

Являются ли widht/height неправильными или почему вы хотите их удалить? – DrColossos

+0

Они разбивают мой код js. – Happy

+0

Почему у вас есть разметка, хранящаяся внутри переменной? – Dolph

ответ

1

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

// 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="".

+0

Спасибо, человек, это работает! – Happy

1

Если атрибуты могут быть переменными, то лучшим выбором для работы с 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

Спасибо, Гордон! 1) с и высота могут быть разными. 2) замена alt не работает – Happy

+0

Я бы предложил '' width = "100" height = "147" alt = "" '', так как после вашего решения будет 2 alt. – DrColossos

1
$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); 
+0

это предполагает, что атрибуты всегда будут отображаться в этом порядке. – Gordon

+0

Что делать, если атрибуты появляются с большим количеством пробелов между ними, например. 'alt =" "width =" 100 "height =" 147 "'? – Gordon

0

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

Смежные вопросы