我使用以下正则表达式将网址转换为href链接。它工作得很好,但是当我使用带有背景图像的样式标签时,我发现了它的错误。
/**
* Convert urls in a string to a html link
* @return string
*/
public static function ConvertUrlsToHtml($str)
{
$str = preg_replace( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', '<a href="\0">\0</a>', $str);
return $str;
}
如果我使用以下内容......
<div class="inner-left" style="background-image: url(http://www.somewebsite/background.jpg);"></div>
它也将背景图像转换为href。
有谁知道如何调整正则表达式来忽略样式标记?
答案 0 :(得分:1)
您可以从删除HTML标记开始,因为您不想替换标记内的网址。 style=
确实如此,<img src=...
和<a href=...>
也是如此。
function ConvertUrlsToHtml($str)
{
$strNoTags = strip_tags($str);
if (preg_match_all( '@(?<![.*">])\b(?:(?:https?|ftp|file)://|[a-z]\.)[-A-Z0-9+&#/%=~_|$?!:,.]*[A-Z0-9+&#/%=~_|$]@i', $strNoTags, $matches)) {
foreach ($matches[0] as $match) {
$str = str_replace($match, "<a href=\"$match\">$match</a>", $str);
}
}
return $str;
}
它的作用:
正如评论所述,您可以先尝试使用HTML解析器来提取文本,而不是strip_tags
。