PHP“preg_replace”将查询参数添加到某个域的任何URL

时间:2012-07-06 18:58:08

标签: php url parameters preg-replace

我有一个字符串:

$description = '
<a href="http://www.replace.com/1st-link/">1st link in string</a>,
<a href="http://www.ignore.com/">2nd link in string</a>, some other text in string,
<a href="http://www.replace.com/3rd-link/">3rd link in string</a>.
';

我需要使用preg_replace将“?id = awesome”的查询参数附加到“replace.com”的$ description字符串中的任何url(忽略所有其他链接,即“ignore.com”)。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:5)

我强烈建议使用DOM解析器而不是正则表达式。例如:

$description = '...';
$wrapper = "<root>".$description."</root>";
$dom = new DOMDocument();
$dom->loadXML($wrapper);
$links = $dom->getElementsByTagName('a');
$count = $links->length;
for( $i=0; $i<$count; $i++) {
    $link = $links->item($i);
    $href = $link->getAttribute("href");
    if( preg_match("(^".preg_quote("http://www.replace.com/").")i",$href))
        $link->setAttribute("href",$href."?id=awesome");
}
$out = $dom->saveXML();
$result = substr($out,strlen("<root>"),-strlen("</root>"));

答案 1 :(得分:2)

好的,很简单,你走了:

$content = preg_replace('/http:\/\/[^"]*?\.replace\.com\/[^"]+/','$0?id=awesome',$description);

希望就是这样,$ content会有字符串,因为他在replace.com域中添加了参数:)