コード例 #1
0
ファイル: seolink.php プロジェクト: sdgdsffdsfff/hdf-client
	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;
	}