用括号中的href替换锚标记

时间:2014-04-10 07:50:58

标签: php html

我想用纯文本替换href部分的html锚标签。

所以,

$input = "Please go to <a href='http://www.google.com' style='color:red'>Google</a> or <a href='http://www.yahoo.com' style='color:red'>Yahoo</a> and search.";

echo fixlinks($input);

// "Please go to Google (http://www.google.com) or Yahoo (http://www.yahoo.com) and search."

更新:我能够使用正则表达式执行此操作,但它还需要在输入字符串中使用许多网址

更新:结束这样做,以下是Elmo答案的变体:

preg_replace("/<a.+href=['|\"]([^\"\']*)['|\"].*>(.+)<\/a>/i",'\2 (\1)',$html)

3 个答案:

答案 0 :(得分:0)

您可以将所有HTML重写为:

<a href='http://www.google.com'>Google</a> (http://www.google.com)

或者您可以使用javascript自动执行页面中的所有<a>标记:

var theLinks=document.querySelectorAll('a');
for (var x=0; x<theLinks.length; x++){
  theLinks[x].outerHTML+=" ("+theLinks[x].href+")";
}

我实际上并不完全确定outerHTML的travestial用法会有效,但您可以轻松地将其附加到innerHTML以及超链接 - 如果是URL文本,那么肯定会有效。

答案 1 :(得分:0)

您可以在PHP中使用Regex:

$input_string = "Please go to <a href='http://www.google.com' style='color:red'>Google</a> and search.";
$pattern = "/<a[\w\s\.]*href='([\w:\-\/\.]*)'[\w\s\.\=':>]+<\/a>/";
$replacement = '(\1)';
$output_string = preg_replace($pattern, $replacement, $input_string);

此正则表达式将整个a标记与其内容和独立href值相匹配。然后,简单的preg_replace函数会将匹配的a标记替换为匹配的href值。

答案 2 :(得分:0)

这是一个更通用的版本(此版本更短且更可靠):

preg_replace('/<a.*href=["\']([^"\']*)["\'].*>(.*)<\/a>/U', '\2 (\1)', $input);

为什么更好?

  • 它处理两种引号["\']
  • 它使用([^"\']*)(不是引号的任何内容)捕获URL,因此它可以处理您提供的任何href。
  • 它使用(.*)来捕获链接文本,因此它几乎可以处理您提供的任何链接文本。
  • 请注意,它需要U修饰符才能使这两个捕获都变得非贪婪。

这里正在起作用:https://www.phpliveregex.com/p/t9s#tab-preg-replace