下面是我从 url 转换为链接的函数:
function url_to_link($string){
/*** make sure there is an http:// on all URLs ***/
$string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
/*** make all URLs links ***/
$string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string);
/*** make all emails hot links ***/
$string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string);
return $string;
}
function update_todo() {
//var input
$projects_id = $_POST['projects_id'];
$content = url_to_link($_POST['content']); // <----- url_to_link()
$date_created = date('Y-m-d H:i:s');
$sth = $this->db->prepare('SELECT * FROM `doc_to_do` where projects_id="'.$projects_id.'" ');
$sth->execute();
$rows = $sth->fetchAll();
$total_rows = count($rows);
if ($total_rows > 0) {
//update
$sql = "UPDATE `doc_to_do` SET content=? WHERE projects_id=?";
$sth = $this->db->prepare($sql);
$sth->execute(array($content,$projects_id));
}
else {
//insert
$sth = $this->db->prepare('INSERT INTO `doc_to_do` (projects_id, content, date_created) VALUES (:projects_id, :content, :date_created)');
$sth->execute(array(':projects_id' => $projects_id, ':content' => $content, ':date_created' => $date_created));
}
}
我尝试使用上面的函数将我的 url 内容转换为链接。首次保存链接时如下所示:
<p><a target="_blank" href="http://stackoverflow.com/">http://stackoverflow.com/</a></p>
当我再次尝试保存时,链接将断开:
<p><a target=\"_blank\" href=\"<a target="_blank" href="http://stackoverflow.com/">http://stackoverflow.com/</a>\"><a target="_blank" href="http://stackoverflow.com/">http://stackoverflow.com/</a></a></p>
如您所见,我的功能不够好,它应该忽略链接但只转换网址