zoukankan      html  css  js  c++  java
  • 替换关键词并过滤特殊标签

    	public static function parse_related_link($content, $extent) {
    		global $_G;
    		loadcache('relatedlink');
    		$allextent = array('article' => 0, 'forum' => 1, 'group' => 2, 'blog' => 3);
    		if($_G['cache']['relatedlink'] && isset($allextent[$extent])) {
    			$searcharray = $replacearray = array();
    			foreach($_G['cache']['relatedlink'] as $link) {
    				$link['extent'] = sprintf('%04b', $link['extent']);
    				if($link['extent'][$allextent[$extent]] && $link['name'] && $link['url']) {
    					$searcharray[$link[name]] = '/('.preg_quote($link['name']).')/i';
    					$replacearray[$link[name]] = "<a href="$link[url]" target="_blank" class="relatedlink">$link[name]</a>";
    				}
    			}
    			if($searcharray && $replacearray) {
    				$_G['trunsform_tmp'] = array();
    				$content = preg_replace("/(<scripts+.*?>.*?</script>)|(<as+.*?>.*?</a>)|(<imgs+.*?[/]?>)|([attach](d+)[/attach])/ies", "helper_seo::base64_transform('encode', '<relatedlink>', '\1\2\3\4', '</relatedlink>')", $content);
    				$content = preg_replace($searcharray, $replacearray, $content, 1);
    				$content = preg_replace("/<relatedlink>(.*?)</relatedlink>/ies", "helper_seo::base64_transform('decode', '', '\1', '')", $content);
    			}
    		}
    		return $content;
    	}
    

      上面是discuz的实现

    后来在sf上还有人写出如下的正则

    (?!(<.*?)|(<a .*?>.*?))核桃(?!([^><]*?/+>)|[^<]*</a>)
    

    测试下来确实也对。

    再加上script标签里的。

    (?!(<.*?)|(<a .*?>.*?)|(<script .*?>.*?))核桃(?!([^><]*?/+>)|[^<]*</a>|[^<]*</script>)
    

      

  • 相关阅读:
    golang实现单链表
    koa中间执行机制
    vuex源码简析
    从浏览器渲染过程看重绘回流
    javascript的this
    js 设计模式:观察者和发布订阅模式
    H5 移动端 键盘遮挡焦点元素解决方案
    webpack4 css modules
    Daily,一个入门级的 React Native 应用
    javascript: 类型转换
  • 原文地址:https://www.cnblogs.com/jenqz/p/6255711.html
Copyright © 2011-2022 走看看