我想传递包含url
的数据,url
将被转换为可点击的链接,但问题是当我运行function
时,它会重复 3 次,数据处理 3 次。如何获得单个数据输出?我尝试删除串联.=
只是=
但随后,只处理了最后一个模式。我希望它采用 3 模式,因为我想在www.ivotism.com
用户输入时将http
添加到href
中,它将<a href="http//www.ivotism.com">www.ivotism.com</a>
而不是<a href="www.ivotism.com">www.ivotism.com</a>
。
function linkify($inputText) {
//URLs starting with http://, https://, or ftp://
$replacePattern1 = '/('b(https?|ftp):'/'/[-A-Z0-9+&@#'/%?=~_|!:,.;]*[-A-Z0-9+&@#'/%=~_|])/i';
$replacedText .= preg_replace($replacePattern1, '<a href="$1" target="_blank">$1</a>', $inputText);
//URLs starting with "www." (without // before it, or it'd re-link the ones done above).
$replacePattern2 = '/(^|[^'/])(www'.['S]+('b|$))/i';
$replacedText .= preg_replace($replacePattern2, '$1<a href="http://$2" target="_blank">$2</a>', $inputText);
//Change email addresses to mailto:: links.
$replacePattern3 = '/(([a-zA-Z0-9'-'_'.])+@[a-zA-Z'_]+?('.[a-zA-Z]{2,6})+)/i';
$replacedText .= preg_replace($replacePattern3, '<a href="mailto:$1">$1</a>', $inputText);
return $replacedText;
}
我运行代码如下所示:
$ab = "<br>1 http://www.ivotism.com <br>2 https://www.ivotism.com/hom.php?u=kira&id=2 <br>3 ftp://www.ivotism.com <br>4 w www.ivotism.com <br>5 info@ivotism.com"; echo
linkify($ab);
这是我得到的结果:
- 1 http://www.ivotism.com
- 2 https://www.ivotism.com/hom.php?u=kira&id=2
- 3 ftp://www.ivotism.com
- 4 www.ivotism.com
- 5 info@ivotism.com
- 1 http://www.ivotism.com
- 2 https://www.ivotism.com/hom.php?u=kira&id=2
- 3 ftp://www.ivotism.com
- 4 www.ivotism.com
- 5 info@ivotism.com
- 1 http://www.ivotism.com
- 2 https://www.ivotism.com/hom.php?u=kira&id=2
- 3 ftp://www.ivotism.com
- 4 www.ivotism.com
- 5 info@ivotism.com
您可以通过将
正则表达式和替换放入数组中,在一次调用preg_replace
中执行所有替换。
$resultText = preg_replace(array($replacePattern1, $replacePattern2, $replacePattern3),
array($replaceSub1, $replaceSub2, $replaceSub3),
$inputText);