public static function set($buffer, $wordset=null) { //先还原原始文本 $buffer = self::rip($buffer); if (($wordset) && (is_array($wordset))) { $seolinkdata = &$wordset; } else { self::getLinkData(); $seolinkdata = self::$linkdata; } //将文本中的链接保护起来 self::$links = array(); self::$linkcount = 0; $buffer = preg_replace_callback('/((\<a|\[url).*?(\<\/a\>|\[\/url\]))/i', array('self', "storeLink"), $buffer); //保持前n个字符不变 $prefix = ""; $matches = null; if (self::$_min_preserve > 0) { if (preg_match('/^(.{'.self::$_min_preserve.'}.*?)(\.|。|\<br\s*\/?\>|\n)(.*)$/is', $buffer, $matches)) { $prefix = $matches[1]; $buffer = $matches[2].$matches[3]; } } $count = 0; //将关键词替换为简短标识 $buffer = mb_convert_encoding($buffer, 'utf8', 'gbk'); mb_regex_encoding('utf8'); foreach($seolinkdata as $order => $item) { $item['id'] = mb_convert_encoding($item['id'], 'utf8', 'gbk'); if (mb_eregi($item["id"], $buffer)) { $buffer = mb_eregi_replace($item["id"], "<!--HDF:$order-->", $buffer, self::$_replace_limit); $count++; //记录到文件 //file_put_contents("/Data/cache/in/seolink.hits.log", "$item[id]\n", FILE_APPEND); } //超过最大次数则退出 if ((self::$_max_replace > 0) && ($count >= self::$_max_replace)) break; } $buffer = mb_convert_encoding($buffer, 'gbk', 'utf8'); //将简短标识替换为完整标识 if ($count) $buffer = preg_replace('/\<!\-\-HDF:(.+?)\-\-\>/e', "'<!--HAODF:'.\$seolinkdata[\${1}]['value'].'-->'.\$seolinkdata[\${1}]['id'].'<!--HAODF:/'.\$seolinkdata[\${1}]['value'].'-->'", $buffer); $buffer = $prefix.$buffer; //还原保护的链接 if (self::$linkcount > 0) $buffer = preg_replace_callback('/\{HDFSEOLINK\:(\d+)\}/', array('self', "restoreLink"), $buffer); return $buffer; }