我想用纯文本替换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)
答案 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
修饰符才能使这两个捕获都变得非贪婪。