我们用下面的正则表达式的URL转换成文本链接,这是缩短了与中间省略号如果他们是太长:正则表达式解析的网址链接,但前提是他们都没有联系尚未
/**
* Replace all links with <a> tags (shortening them if needed)
*/
$match_arr[] = '/((http|ftp)+(s)?:\/\/[^<>\s,!\)]+)/ie';
$replace_arr[] = "'<a href=\"\\0\" title=\"\\0\" target=\"_blank\">' . " .
"(mb_strlen('$0') > {$maxlength} ? mb_substr('$0', 0, " . ($maxlength/2) . ") . '…' . " .
"mb_substr('$0', -" . ($maxlength/2) . ") : '$0') . " .
"'</a>'";
这是工作。然而,我发现,如果在一个链接的文本已经,如:
$text = '... <a href="http://www.google.com">http://www.google.com</a> ...';
它将匹配都的网址,所以它会尝试创建两个<a>
标签,完全搞乱了当然的DOM 。
我怎样才能防止正则表达式匹配,从如果链接已经是一个<a>
标签里面?它也将在title
属性中,所以基本上我只想完全跳过每个<a>
标签。
如何剥离所有锚标签的第一,而不必以过分复杂化当前的正则表达式? – ccKep
_Or_如何解析DOM,处理nodeValues,并_skipping_所有'了'标签,这是我们如何处理标记:通过解析它 –
这是个好主意,但你会怎么做呢? ['strip_tags'(http://php.net/manual/en/function.strip-tags.php)只允许标签白名单.. – Rijk