Замена тегов ссылок html с текстовым описанием

Я искал вокруг и, похоже, не получил правильного ответа. Я хочу заменить все ссылки в данной строке HTML следующим образом:

... <a href="link.php">Description Here</a> ... to: Description Here: link.php 

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

Вы могли бы сделать что-то вроде этого:

 $text = '<a href="link.php">Description Here</a>'; $replaced = preg_replace('/<a [^>]*href="(.*)"[^>]*>(.*)<\/a>/', '$2: $1', $text); 

PCRE сохраняет вас:

 $text = '<a href="link.php">Description Here</a>'; echo preg_replace("/\<a.*href=\"(.*)\".*\>(.*)\<\/a\>/Usi",'$2: $1',$text); 
 echo preg_replace("/<a.*?href=\"(.*?)\".*?>(.*?)<\/a>/i", "$2: $1", $html); 

В чистом php из общего html-файла вы можете:

 <?php //an example html string $dataStr = '<ul id="sub-menu"> <li class="parent item10"><a href="link1.php">Arts</a> <ul> <li class="item29"> <a href="link2.php">Arts Show</a></li> <li class="item29"> <a href="link3.php">Another Arts Show</a></li> </ul> </li> <li class="parent item15"><a href="link6.php">News</a> <ul> <li class="item18"> <a href="link7.php">News Show</a></li> </ul> </li> </ul>'; $startIndex = strpos($dataStr, "<a", 0); $endIndex = strpos($dataStr, "</a", $startIndex); while (1==1){ if($startIndex == false || $endIndex == false){ break; } $currentLine = substr($dataStr,$startIndex,($endIndex-$startIndex)+4); $linkStartIndex = strpos($currentLine, "href=", 0)+6; $linkEndIndex = strpos($currentLine, '"', $linkStartIndex); $currentLink = substr($currentLine,$linkStartIndex,$linkEndIndex-$linkStartIndex); $descriptionStartIndex = strpos($currentLine, ">", $linkEndIndex)+1; $descriptionEndIndex = strpos($currentLine, "<", $descriptionStartIndex); $currentDescription = substr($currentLine,$descriptionStartIndex,$descriptionEndIndex-$descriptionStartIndex); echo ($currentDescription.": ".$currentLink."\n"); $startIndex = strpos($dataStr, "<a", $endIndex+5); $endIndex = strpos($dataStr, "</a", $startIndex); } ?>