Замените href текстом ссылки / именем - PullRequest
2 голосов
/ 10 июня 2011

У меня есть строка в php с множеством тегов ... Подробнее об очистке см. Ниже

Это как .... бла бла бла бла бла бла

<a href="test.php">link1</a'> hellllo

<a href="test.php">link2</a> hiiiiiiiiii

Моя проблема в том, что я хочу заменить href, т.е. test.php, на link1, link2, link3 .... и т. Д.

Пожалуйста, помогите. '' добавлены для показа, считайте их только правильными ссылками

Ответы [ 2 ]

2 голосов
/ 11 июня 2011

используйте DOMDocument и друзей: http://php.net/manual/en/class.domdocument.php

Как-то так, но неуверенно, что это не проверено, и я только ухожу от документации.

$xml = new DOMDocument();
$xml->loadHTML($input_string);
$link_list = $xml->getElementsByTagName('a');
$link_list_length = $link_list->length;
for ($i = 0; $i < $link_list_length; $i++) {
    $attributes = $link_list->item($i)->attributes;
    $href = $attributes->getNamedItem('href');
    $href->value = $link_list->item($i)->nodeValue;
}
$output_string = $xml->saveHTML();
0 голосов
/ 10 июня 2011

Прежде всего, не используйте регулярные выражения.Это может работать немного, но на этом пути лежит безумие.

То, что вы хотите сделать, это разобрать строку в XML, используя PHP-библиотеку DOMЭто преобразует HTML (при условии, что он является действительным HTML и не искажен) в набор объектов, которые вы можете перемещать, изменять, а затем преобразовывать обратно в строку.как этот .

Это чисто неординарный код, я не проверял его, но он должен дать вам общее представление:

$doc = new DOMDocument();
$doc->loadHtml($YOUR_DATA); 
$links = $doc->getElementsByTagName( "a" );
foreach( $links as $link )
{
    // Modify $link however you need to
}
$CONVERTED_DATA = $doc->saveHtml();
...