我有一个textarea,我的用户需要被允许发布链接,邮件和图像。PHP允许img和锚 - 但排除其他标签
function autolink($message)
{
$text = " " . $message;
$text = preg_replace("#([\n ])([a-z]+?)://([a-z0-9\-\.,\?!%\*_\#:;~\\&[email protected]\/=\+]+)#i", "\\1<a href=\"\\2://\\3\" target=\"_blank\" class=\"link\">\\2://\\3</a>", $text);
$text = preg_replace("#([\n ])www\.([a-z0-9\-]+)\.([a-z0-9\-.\~]+)((?:/[a-z0-9\-\.,\?!%\*_\#:;~\\&[email protected]\/=\+]*)?)#i", "\\1<a href=\"http://www.\\2.\\3\\4\" target=\"_blank\" class=\"link\">www.\\2.\\3\\4</a>", $text);
$text = preg_replace("#([\n ])([a-z0-9\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)?[\w]+)#i", "\\1<a href=\"mailto:\\[email protected]\\3\" class=\"link\">\\[email protected]\\3</a>", $text);
$text = substr($text, 1);
return($text);
}
这个功能就像一个魅力,但如果我想添加一个替换img src的行 - 它不再工作。
$text = preg_replace('#<img.+?src="([^"]*)".*?/?>#i', '<a href="$1">$0</a>', $text);
上述工作很好,但现在它不会取代锚和邮件作为链接。
我搜索了这个论坛,发现一个可能工作的答案,它包括php函数strip_tags();
$allowed = "<img><a>";
$formatted = strip_tags($_POST['usercomment'], $allowed);
什么是最安全(和正确)的解决方案呢?我已经阅读了一些DOM,并且regulair表达式不适合这份工作,但我真的需要som来帮助解决这个问题。 如果没有与img标签一致的行,当用户发布链接(http://example.com)时,我的功能可以很好地工作,并且可以点击。
对不起,我的英语不好,描述的方式,这是我的第一篇帖子inhere。
使用降价,期。 – moonwave99
前3个正则表达式的工作如何?他们都被双引号错误地在字符串中转义。 – sln
@sln如果用户写一个没有html的链接,当我输出内容时它会变成可点击的链接。我不知道它是如何工作的,对不起 – mhDK