我希望能够在注释字段中接受用户输入的文本并检查URL类型表达式,如果存在,请在显示注释时添加定位标记(到url)。
我在服务器端使用PHP,在客户端使用Javascript(带有jQuery),因此我应该等到显示URL之前,才检查URL吗?还是在将锚标记插入数据库之前添加锚标记?
所以
<textarea id="comment">check out blahblah.com or www.thisthing.co.uk or http://checkthis.us/</textarea>
变成
<div id="commentDisplay">check out <a href="blahblah.com">blahblah.com</a> or <a href="www.thisthing.co.uk">www.thisthing.co.uk</a> or <a href="http://checkthis.us/">http://checkthis.us/</a></div>
首先,一个请求。在将数据写入数据库之前,请勿执行此操作。而是在向最终用户显示数据之前执行此操作。这将减少所有混乱,并在将来为您提供更大的灵活性。
在网上找到一个示例如下:
$text = preg_replace('@(https?://([-\w\.]+)+(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)?)@', '<a href="$1">$1</a>', $text); /** * Replace links in text with html links * * @param string $text * @return string */ function auto_link_text($text) { $pattern = '#\b(([\w-]+://?|www[.])[^\s()<>]+(?:\([\w\d]+\)|([^[:punct:]\s]|/)))#'; $callback = create_function('$matches', ' $url = array_shift($matches); $url_parts = parse_url($url); $text = parse_url($url, PHP_URL_HOST) . parse_url($url, PHP_URL_PATH); $text = preg_replace("/^www./", "", $text); $last = -(strlen(strrchr($text, "/"))) + 1; if ($last < 0) { $text = substr($text, 0, $last) . "…"; } return sprintf(\'<a rel="nowfollow" href="%s">%s</a>\', $url, $text); '); return preg_replace_callback($pattern, $callback, $text); }