2013-03-03 2 views
1

Как удалить все атрибуты из <a> тегов, кроме href="/index.php..."? и добавить к нему специальный класс?Удаление атрибутов тегов с регулярным выражением в PHP

Так что:

<a href="/index.php?option=com_virtuemart&view=cart&Itemid=105&lang=en" style="float:right;">content</a> 

становится:

<a href="index.php?option=com_virtuemart&view=cart&Itemid=105&lang=en" class="custom">content</a> 

я не могу управлять preg_replace работать его: `

<?php 
    $text = '<a href="index.php?option=com_virtuemart&view=cart&Itemid=105&lang=en" class="custom">content</a>'; 
    echo preg_replace("/<a([a-z][a-z0-9]*)(?:[^>]*(\shref=['\"][^'\"]['\"]))?>/i", '<$1$2$3>', $text); 
?> 
+1

Уверенный звучит как простая работа с парсером. – Wiseguy

+0

Я попробовал, если вы говорите о парсере html, но я не могу это сделать – aspirinemaga

+1

Возможный дубликат: http://stackoverflow.com/questions/770219/how-can-i-remove-attributes-from-an- html-tag – Kalzem

ответ

2

DOMDocument лучше, но с регулярным выражением

preg_replace("/<a [^>]*?(href=[^ >]+)[^>]*>/i", '<a $1 class="custom">', $text); 

не Предполагает нет места в href и в атрибутах не >.

+0

спасибо вам большое @MikeM! – aspirinemaga

1

Вы можете использовать DomDocument:

libxml_use_internal_errors(true); 
$doc = new DOMDocument(); 
$doc->loadHTML('<a href="/index.php?option=com_virtuemart&view=cart&Itemid=105&lang=en" style="float:right;">content</a>'); 
$items = $doc->getElementsByTagName('a'); 
$href = $items->item(0)->getAttribute('href'); 
$value = $items->item(0)->nodeValue; 
libxml_clear_errors(); 
echo '<a href="'.$href.'" class="custom">'.$value.'</a>'; 
+0

. Я попробовал это уже, но без 'libxml_' (не знал о них), и это не сработало. – aspirinemaga

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