【问题标题】:How can you find all HTML hyper link tags in a string and replace them with their href value?如何在一个字符串中找到所有 HTML 超链接标签并用它们的 href 值替换它们?
【发布时间】:2010-04-15 20:31:49
【问题描述】:

我想获取一串文本并找到所有超链接标签,获取它们的 href 值,然后将整个超链接标签替换为 href 属性的值。

【问题讨论】:

    标签: php html hyperlink


    【解决方案1】:

    许多可能性。例如。通过使用DOM extensionDOMDocument::loadhtml()XPath(尽管在这种情况下 getElementsbyTagName() 就足够了)。

    <?php
    $string = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
    "http://www.w3.org/TR/html4/strict.dtd"><html><head><title>...</title></head><body>
      <p>
        mary had a <a href="little">greedy</a> lamb
        whose fleece was <a href="white">cold</a> as snow
      </p>
    </body></html>';
    
    $doc = new DOMDocument;
    $doc->loadhtml($string);
    
    $xpath = new DOMXPath($doc);
    foreach( $xpath->query('//a') as $a ) {
      $tn = $doc->createTextNode($a->getAttribute('href'));
      $a->parentNode->replaceChild($tn, $a);
    }
    
    echo $doc->savehtml();
    

    打印

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
    <html>
    <head><title>...</title></head>
    <body><p>
        mary had a little lamb
        whose fleece was white as snow
      </p></body>
    </html>
    

    【讨论】:

    • @OregonGhost - 使用正则表达式可能不是最好的主意......我也+1
    • @VolkerK 这就像一个魅力。我不知道存在这种替代方法,而且它似乎比使用正则表达式简单得多。 @OregonGhost & @Buggabill 为什么正则表达式不是首选方法?有时只是过度杀戮或过度复杂化?再次感谢您的帮助! :)
    • @hsatterwhite: 见codinghorror.com/blog/2009/11/parsing-html-the-cthulhu-way.html 正则表达式可能是解析器的一部分,但单独的正则表达式不能完成这项工作(对于任意html)
    • 哇,读得真好!我会投票,但我太新了。 ;)
    • 话虽如此,如果您可以对字符串(结构和它可以包含的字符)做出某些假设,则可以使用正则表达式。 Jeriko 有一点说“如果 HTML 格式不正确,至少正则表达式不会中断”。仔细看看我的例子的输出。即使在这种情况下,底层 libxml 也做了一些小的更改(在这种情况下在哪里使用换行符)。输出“仅”等效。但总的来说,当您使用正则表达式解析 html 时,您会(并且应该)引起注意。
    猜你喜欢
    • 2021-10-16
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多