RegEx заменяет все значения ширины и высоты в HTML-тегах - PullRequest
1 голос
/ 13 июня 2011

Я получил этот RegEx из другого поста, но он не полностью функционирует так, как должен.

Вот шаблон: /(<[^>]+ (height|width)=)"[^"]*"/gi и замена: $1"auto"

Воттипичная строка замены: <p width="123" height="345"></p>

Теперь я хотел бы, чтобы это вернуло <p width="auto" height="auto"></p>, но вместо этого оно возвращает <p width="123" height="auto"></p>.

Не могли бы вы помочь мне выяснить, как можно заменитьзначения ширины и высоты в HTML-теге?О, и мне бы очень хотелось, чтобы он работал и с маленькими апострофными знаками (например, width='*').

Большое спасибо!

Ответы [ 2 ]

9 голосов
/ 13 июня 2011

Не делайте этого с регулярным выражением. Вместо этого используйте DOM - это не очень сложно:

$dom = new DOMDocument;
$dom->loadHTML($yourHTML);

$xpath = new DOMXPath($dom);

$widthelements = $xpath->query('//*[@width]'); // get any elements with a width attribute

foreach ($widthelements as $el) {
    $el->setAttribute('width', 'auto');
}

$heightelements = $xpath->query('//*[@height]'); // get any elements with a height attribute
foreach ($heightelements as $el) {
    $el->setAttribute('height', 'auto');
}

$yourHTML = $dom->saveHTML();

Возможно, лучше вместо этого просто удалить атрибут - если так, выполните $el->removeAttribute('width'); или аналогичную операцию для height.

3 голосов
/ 13 июня 2011

Пожалуйста, используйте анализатор HTML , а не регулярное выражение.Пожалуйста?

$input = '<p width="123" height="345"></p>';
$doc = DOMDocument->loadHTML($input);

// ... make changes ...

$output = $doc->saveHTML();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...