【问题标题】:Replace href with link text/name用链接文本/名称替换 href
【发布时间】:2011-09-12 18:19:24
【问题描述】:

我在 php 中有一个带有许多标签的字符串...更多说明请参见下文

就像.... bla bla bla bla bla

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

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

我的问题是我想用 link1,link2,link3 .... 替换 href 即 test.php。

请帮助。添加“ ”仅用于显示,将它们视为正确的链接

【问题讨论】:

  • 你能把代码贴出来澄清一下吗?
  • 它就像 我想用它的值替换act_rules.html,即“对应税服务的估价”收取服务税”感谢您考虑
  • Wby 你希望链接锚点作为 href,指向一个无效的目的地吗?您想在这里实现什么目标?
  • 此链接 1、2、3 不是静态的 .. 它们可能是 5、10、15 的字符串 .... cherecter .. 表示不是静态的 .. 它不断变化 .. 所以不是有可能以这种方式..您有其他解决方案吗?

标签: php href


【解决方案1】:

使用 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();

【讨论】:

  • @miurvictim 很高兴我能提供帮助。如果这是解决您的问题的解决方案,您可能希望通过单击旁边的复选标记来接受答案。这有助于下一个发现此帖子的人遇到类似问题。
  • @miurvictim 它应该在答案左侧的投票号码正下方。
【解决方案2】:

首先,不要使用正则表达式。它可能会奏效,但在这条路上会很疯狂。

您要做的是使用 PHP 的“DOM”库将字符串解析为 XML。这会将 HTML(假设它是有效的 HTML 并且没有格式错误)转换为一组对象,您可以导航、修改这些对象,然后稍后再转换回字符串。

您可以在网络上找到多个指南,例如 this one

这纯粹是现成的代码,我没有测试过,但它应该给你一个大概的想法:

$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();

【讨论】:

    猜你喜欢
    • 2018-03-22
    • 2011-03-06
    • 2023-01-12
    • 1970-01-01
    • 2013-12-13
    • 2011-11-25
    • 1970-01-01
    • 2011-03-07
    • 2023-03-18
    相关资源
    最近更新 更多