我想将用户评论中的网址转换为链接。
我没有时间测试像HTML Purify这样的臃肿的反xss库,所以我不会允许任何html标签。
我只想让所有内容都通过htmlentities()和nl2br(),然后使用preg_replace()查找网址并将其转换为链接('a'html标记)。
抓住我找到的网址并将它们放入href =''?
是不安全的如果没有,我该怎么办呢?
答案 0 :(得分:1)
是的,它应该是安全的。如果您想知道如何,这是我用于此的函数(我为此帖子简化了它):
function formatPost($string) {
return nl2br(
preg_replace_callback(
'~https?://([^/\s]+)(?:/((?>[/\w]+|\S(?!\s|$))*))?~',
function($matches) {
$url = $matches[0];
$host = $matches[1];
$path = isset($matches[2]) ? $matches[2] : '';
$follow = false;
if ('' == $path) {
$text = $host;
} elseif ($_SERVER['HTTP_HOST'] == $host) {
$text = $path;
$follow = true;
} else {
$text = $host . '/' . $path;
}
return '<a href="' . $url . '"' . (!$follow ? ' rel="nofollow"' : '') . '>' . $text . '</a>';
},
htmlspecialchars($string)
)
);
}