0

我目前正在编写一个脚本来存档一个图像板。我有点坚持正确地引用链接,所以我可以使用一些帮助。

我收到这个字符串:

<a href="10028949#p10028949" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???

在所述字符串中,我需要更改这部分:

<a href="10028949#p10028949"

变成这样:

<a href="#p10028949"

使用 PHP。

这部分可能在字符串中出现多次,也可能根本不出现。如果您有我可以用于此目的的代码片段,我将不胜感激。

提前致谢!肯尼

4

3 回答 3

0

免责声明:正如评论中所说,使用 DOM 解析器更好地解析 HTML。

话虽如此:

"/(<a[^>]*?href=")\d+(#[^"]+")/"

取而代之$1$2

所以...

$myString = preg_replace("/(<a[^>]*?href=\")\d+(#[^\"]+\")/", "$1$2", $myString);
于 2013-04-22T12:20:25.667 回答
0

试试这个

<a href="<?php echo strstr($str, '#')?>" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???
于 2013-04-22T12:22:19.507 回答
0

虽然您已经回答了问题,但我邀请您看看(大约 xD)是正确的方法,用 DOM 解析它:

$string = '<a href="10028949#p10028949" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???';

$dom = new DOMDocument();
$dom->loadHTML($string);

$links = $dom->getElementsByTagName('a'); // This stores all the links in an array (actually a nodeList Object)

foreach($links as $link){
    $href = $link->getAttribute('href'); //getting the href

    $cut = strpos($href, '#');
    $new_href =  substr($href, $cut); //cutting the string by the #

    $link->setAttribute('href', $new_href); //setting the good href
}

$body = $dom->getElementsByTagName('body')->item(0); //selecting everything

$output = $dom->saveHTML($body); //passing it into a string

echo $output;

这样做的好处是:

  • 更有条理/更清洁
  • 更容易被其他人阅读
  • 例如,您可能有混合链接,而您只想修改其中的一些。使用 Dom 你实际上只能选择某些类
  • 您也可以更改其他属性,或所选标签的兄弟姐妹、父母、孩子等...

当然,您也可以使用正则表达式达到最后两点,但这将是一团糟......

于 2013-04-22T13:30:43.933 回答