forked from extern/egroupware
handle doublequotes that may enclose URLs
This commit is contained in:
parent
202ba250b2
commit
f2effdff1c
@ -63,11 +63,30 @@ class Html
|
|||||||
$Protocol = '(http:\/\/|(ftp:\/\/|https:\/\/))'; // only http:// gets removed, other protocolls are shown
|
$Protocol = '(http:\/\/|(ftp:\/\/|https:\/\/))'; // only http:// gets removed, other protocolls are shown
|
||||||
$Domain = '([\w-]+\.[\w-.]+)';
|
$Domain = '([\w-]+\.[\w-.]+)';
|
||||||
$Subdir = '([\w\-\.,@?^=%&;:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
|
$Subdir = '([\w\-\.,@?^=%&;:\/~\+#]*[\w\-\@?^=%&\/~\+#])?';
|
||||||
$Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . '/i';
|
$optStuff = '("|"|;)?';
|
||||||
|
$Expr = '/' . $NotAnchor . $Protocol . $Domain . $Subdir . $optStuff . '/i';
|
||||||
// use preg_replace_callback as we experienced problems with https links
|
// use preg_replace_callback as we experienced problems with https links
|
||||||
$result3 = preg_replace_callback($Expr, function ($match)
|
$result3 = preg_replace_callback($Expr, function ($match)
|
||||||
{
|
{
|
||||||
return "<a href=\"".($match[1]&&!$match[2]?$match[1]:'').($match[2]?$match[2]:'').$match[3].$match[4]."\" target=\"_blank\">".$match[3].$match[4]."</a>";
|
$additionalQuote="";//at the end, ...
|
||||||
|
// only one " at the end is found. chance is, it is not belonging to the URL
|
||||||
|
if ($match[5]==';' && (strlen($match[4])-6) >=0 && strpos($match[4],'"',strlen($match[4])-6)!==false && strpos(substr($match[4],0,strlen($match[4])-6),'"')===false)
|
||||||
|
{
|
||||||
|
$match[4] = substr($match[4],0,strpos($match[4],'"',strlen($match[4])-6));
|
||||||
|
$additionalQuote = """;
|
||||||
|
}
|
||||||
|
// if there is quoted stuff within the URL then we have at least one more " in match[4], so chance is the last " is matched by the one within
|
||||||
|
if ($match[5]==';' && (strlen($match[4])-6) >=0 && strpos($match[4],'"',strlen($match[4])-6)!==false && strpos(substr($match[4],0,strlen($match[4])-6),'"')!==false)
|
||||||
|
{
|
||||||
|
$match[4] .= $match[5];
|
||||||
|
}
|
||||||
|
if ($match[5]==';'&&$match[4]==""")
|
||||||
|
{
|
||||||
|
$match[4] ='';
|
||||||
|
$additionalQuote = """;
|
||||||
|
}
|
||||||
|
//error_log(__METHOD__.__LINE__.array2string($match));
|
||||||
|
return "<a href=\"".($match[1]&&!$match[2]?$match[1]:'').($match[2]?$match[2]:'').$match[3].$match[4]."\" target=\"_blank\">".$match[3].$match[4]."</a>$additionalQuote";
|
||||||
}, $result2);
|
}, $result2);
|
||||||
|
|
||||||
// Now match things beginning with www.
|
// Now match things beginning with www.
|
||||||
|
Loading…
Reference in New Issue
Block a user