替换类似电话的字符串为电话链接比较简单,就是用正则找出电话号码,再给他家链接
preg_replace_callback("/\d{2,}[\-\d]{5,}/i",function($content){
.....
},$content);
但是如果是富文本编辑的内容,可能会有问题,比如如果图片链接或者A标签里有类似电话的内容,就会出现问题了。
所以需要只针对非标签内容进行替换,但正则表达式是以匹配为准则,不能找到不匹配的。
所以想到的办法如下,把内容里的所有标签替换为非标签,进行需要的替换,再把非标签还原为标签。
function replace_tel($document_content){
global $_mtag_i,$_mtag_buffer;
$_mtag_i = 0;
$_mtag_buffer = array();
$document_content = preg_replace_callback("/<[^>]*>/i",function($matches){
global $_mtag_i,$_mtag_buffer;
$_mtag_i++;
$str = $matches[0];
$_mtag_buffer[$_mtag_i] = $matches[0];
return "@[mtag|{$_mtag_i}]";
},$document_content);
$document_content = preg_replace_callback("/[\d]{2,}(\-[\d]+)*/i",function($matches){
$str = $matches[0];
if(strlen($str)<8) return $str;
return "<a href='tel:{$matches[0]}'>{$matches[0]}</a>";
},$document_content);
$document_content = preg_replace_callback("/\@\[mtag\|(\d+)\]/i",function($matches){
global $_mtag_buffer;
$i = $matches[1];
if(is_numeric($i) && $i>0 && !empty($_mtag_buffer[$i])){
return $_mtag_buffer[$i];
}
},$document_content);
return $document_content;
}