现在通过以下代码来替换文章中的关键词(关键词通过后台进行添加)
//添加内链
$innerlink = $this->model('innerlink')->all_innerlink();
if($innerlink){
$last_id = $this->model('innerlink')->get_last_link_id();
for($i=0;$i<$last_id;$i++)
{
$title[$i] = $innerlink[$i]['title'];
$link[$i] = '<a href='.$innerlink[$i]['description'].' target="_blank">'.$innerlink[$i]['title'].'</a>';
$article_info['message'] = $this->model('innerlink')->str_replace_once($title[$i],$link[$i],$article_info['message']);
}
}
//内链添加结束
模型代码如下:
/**
*得到内链列表
*/
public function get_innerlink_list($where = null, $order = 'id DESC', $limit = 10, $page = null)
{
if ($innerlink_list = $this->fetch_page('innerlink', $where, $order, $page, $limit))
{
foreach ($innerlink_list AS $key => $val)
{
$innerlink_list[$key]['add_date'] = date("Y-m-d H:i:s",$val['add_time']);
$innerlink_list[$key]['user'] = $this->fetch_one('users', 'user_name', "uid = '" . $this->quote($val['user_id']) . "'");
}
}
return $innerlink_list;
}
/**
* 物理删除内链
*
* @param $innerlink_id
*/
public function remove_innerlink_by_ids($innerlink_id)
{
if (!$innerlink_id)
{
return false;
}
if (is_array($innerlink_id))
{
$innerlink_ids = $innerlink_id;
}
else
{
$innerlink_ids[] = $innerlink_id;
}
array_walk_recursive($innerlink_ids, 'intval_string');
foreach($innerlink_ids as $innerlink_id)
{
if (!$innerlink_info = $this->get_innerlink_by_id($innerlink_id))
{
continue;
}
// 删除动作
$this->delete('innerlink', 'id = ' . intval($innerlink_id));
}
return true;
}
public function get_last_link_id()
{
$ids = $this->query_all('SELECT `id` FROM ' . get_table('innerlink') . ' order by add_time Desc');
return $ids['0']['id'];
}
function str_replace_once($needle,$replace,$haystack) {
$pattern = '/<img[^>]*>/is';
preg_match_all($pattern, $haystack, $matched);
if(empty($matched[0])){
$pos = strpos($haystack, $needle);
if ($pos === false) {
return $haystack;
}
return substr_replace($haystack, $replace, $pos, strlen($needle));
} else {
$arr = preg_split($pattern, $haystack);
$haystack_new = '';
$replace_time = 0;
foreach($arr as $key => $str){
$pos = strpos($str, $needle);
if ($pos === false || $replace_time > 0 || strpos($str, $needle.'</a>') !== false) {
$haystack_new .= $str;
} else {
$haystack_new .= substr_replace($str, $replace, $pos, strlen($needle));
$replace_time = 1;
}
if(isset($matched[0][$key])) $haystack_new .= $matched[0][$key];
}
return $haystack_new;
}
}
现在是,如果我自己添加的链接也会被替换掉(如果后台添加了这个关键词)
有没有办法直接取消对现在已经有的链接的替换
只替换没有<a >
的关键词
能否直接简单处理