php过滤广告内容(兼职,QQ号,淘宝兼职,网址)
用户发表的评论或者其他内容的广告的类型一般有下面的几种:
1:淘宝兼职 加QQ 123456789 群 (带qq号码或者微信号码或者其他数字号码)
2:taobao兼职,加QQ 号码 (带着英文的关键字)
3:淘宝兼职,加QQ ① ① ① ① ① ① (特殊数字的号码)
4:22222222 (全角类型的号码)
过滤的方法:
利用正则来匹配和替换字符串的标点符号,数字,字母,判断是否存在连续的数字或者关键字(支持全角和圆角),因为广告一般都是会带上qq号等联系方式。因此首先要对评论进行”净化”和替换,把全角的转换成半角的,去掉一些”沙子”,比如标点符号,空格,字母等等,只留下中文和数字。
例子:
$comment= “这$%是一个(1)8神器三四的网站,B快来加入④④呵@#呵 qq 1 2 3 4 5 6 7 8″;
1:”净化”内容,去除标点符号
$flag_arr=array('?','!','¥','(',')',':','‘','’','“','”','《','》',',','…','。','、','nbsp','】','【','~');
$comment=preg_replace('/\s/','',preg_replace("/[[:punct:]]/",'',strip_tags(html_entity_decode(str_replace($flag_arr,'',$comment),ENT_QUOTES,'UTF-8'))));
处理后,$comment 变成了:”这是一个(1)8神器三四的网站B快来加入①④呵呵qqq12345678″
2:其中可能参杂了一些全角的符号或者数字,所以利用下面的代码把全角符号转成正则可以匹配的半角
$quanjiao = array('0' => '0', '1' => '1', '2' => '2', '3' => '3', '4' => '4','5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', 'A' => 'A', 'B' => 'B', 'C' => 'C', 'D' => 'D', 'E' => 'E','F' => 'F', 'G' => 'G', 'H' => 'H', 'I' => 'I', 'J' => 'J', 'K' => 'K', 'L' => 'L', 'M' => 'M', 'N' => 'N', 'O' => 'O','P' => 'P', 'Q' => 'Q', 'R' => 'R', 'S' => 'S', 'T' => 'T','U' => 'U', 'V' => 'V', 'W' => 'W', 'X' => 'X', 'Y' => 'Y','Z' => 'Z', 'a' => 'a', 'b' => 'b', 'c' => 'c', 'd' => 'd','e' => 'e', 'f' => 'f', 'g' => 'g', 'h' => 'h', 'i' => 'i','j' => 'j', 'k' => 'k', 'l' => 'l', 'm' => 'm', 'n' => 'n','o' => 'o', 'p' => 'p', 'q' => 'q', 'r' => 'r', 's' => 's', 't' => 't', 'u' => 'u', 'v' => 'v', 'w' => 'w', 'x' => 'x', 'y' => 'y', 'z' => 'z','(' => '(', ')' => ')', '〔' => '[', '〕' => ']', '【' => '[','】' => ']', '〖' => '[', '〗' => ']', '“' => '[', '”' => ']','‘' => '[', '\'' => ']', '{' => '{', '}' => '}', '《' => '<','》' => '>','%' => '%', '+' => '+', '—' => '-', '-' => '-', '~' => '-',':' => ':', '。' => '.', '、' => ',', ',' => '.', '、' => '.', ';' => ',', '?' => '?', '!' => '!', '…' => '-', '‖' => '|', '”' => '"', '\'' => '`', '‘' => '`', '|' => '|', '〃' => '"',' ' => ' ');
$comment=strtr($comment, $quanjiao);
php 的strtr 函数是用来转换字符串中特定的字符。
可以使用
strtr(string,from,to)
或者
strtr(string,array)
处理后,$comment变成了:”这是一个18神器三四的网站B快来加入①④呵呵qq12345678″;
3:评论里面可能 还包含有特殊字符(可以自己在下面的数组进行扩展新的特殊字符)
$special_num_char=array('①'=>'1','②'=>'2','③'=>'3','④'=>'4','⑤'=>'5','⑥'=>'6','⑦'=>'7','⑧'=>'8','⑨'=>'9','⑩'=>'10','⑴'=>'1','⑵'=>'2','⑶'=>'3','⑷'=>'4','⑸'=>'5','⑹'=>'6','⑺'=>'7','⑻'=>'8','⑼'=>'9','⑽'=>'10','一'=>'1','二'=>'2','三'=>'3','四'=>'4','五'=>'5','六'=>'6','七'=>'7','八'=>'8','九'=>'9','零'=>'0');
$comment=strtr($comment, $special_num_char);
处理后,$comment变成了:”这是一个18神器的网站B快来加入14呵呵qq12345678″;
如果评论里面出现繁体的数字,例如 ‘零’,’壹’,’贰’,’叁’,’肆’,’伍’,’陆’,’柒’,’捌’,’玖’,’拾’ 这些,一样的在上面的 $special_num_char 添加 和扩展就行。
4:评论里还可能出现正常的数字和汉字的数字混合,一样的用第3点的方法转换成正常的数字即可。
例子:这是一条广告qq 1二贰45六7899
转换后:
这是一条广告qq 1224567899
5:正则处理过滤广告
利用正则匹配 preg_match_all(‘/\d+/’,$comment,$match)
分析获取到的match[0] 匹配数组
foreach($match[0] as $val)//是否存在数字的qq号和微信号
{
if(strlen($val)>=6)
{//存在连续的长度超过6位的数字串,广告嫌疑很大
$is_ad=true;
break;
}
}
if(count($match[0])>=10)
{//间断的数字很多,存在广告的嫌疑
$is_ad=true;
}
ok,这样就可以判断内容是否广告,可以过滤大部分的常见的广告了
前面介绍过一个过滤了些特殊字符的php程序,下面我们升级一下这个敏感词过滤函数更强大了有了它再也不怕敏感词中间加空格或者其他标点符号了。
只要用户可以发言的地方,就可能出现广告或者其他敏感词,因此必须加入敏感词过滤机制来保持站点的”纯洁”。
过滤机制:加入php关键字正则匹配
//$str 为用户数据
function wordFilter($str)
{
/*
获取敏感词列表
敏感词的存储方法:
1:存储在txt文件中(一般的方法)
2:存储在缓存(比较好的方法)
我是存储在memcachd中。
*/
$words = getSensitiveWords();
foreach ($words as $word)
{
$preg_letter = '/^[A-Za-z]+$/';
if (preg_match($preg_letter, $str))
{//匹配中文
$str = strtolower($str);
$pattern_1 = '/([^A-Za-z]+' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word . '\s+)|(\s+' . $word . '[^A-Za-z]+)|(^' . $word . '[^A-Za-z]+)|([^A-Za-z]+' . $word.'$)/';
//敏感词两边不为空
if (preg_match($pattern_1, $str))
{
$flag = TRUE;
}
$pattern_2 = '/(^' . $word . '\s+)|(\s+' . $word . '\s+)|(\s+' . $word . '$)|(^' . $word . '$)/';
//敏感词两边可以为空格
if (preg_match($pattern_2, $str))
{
$flag = TRUE;
}
}
else
{//匹配英文字符串,大小写不敏感
$pattern = '/\s*' . $word . '\s*/';
if (preg_match($pattern, $str))
{
$flag = TRUE;
}
}
}
}
存在问题:
如果单纯只加入关键字匹配,用户反过滤的方法五花八门,包括中间加入空格或者其他标点符号。
例子:
敏感词:扣扣
用户处理后:
扣 扣
扣,扣
扣@扣
扣1扣
这时候代码的正则匹配就可能匹配不出来。
解决办法:
先对用户数据去除所有的标点符号和一些特殊字符,然后再进行敏感词判断。
代码:
$flag_arr=array('?','!','¥','(',')',':','‘','’','“','”','《','》',',','…','。','、','nbsp','】','【','~');
$content_filter=preg_replace('/\s/','',preg_replace("/[[:punct:]]/",'',strip_tags(html_entity_decode(str_replace($flag_arr,'',$content),ENT_QUOTES,'UTF-8'))));
$content_filter 就是处理后的用户数据,然后再进行 wordFilter($content_filter ) 过滤操作
通过php+mysql 实现的简易blog,可以实现增删改查。效果如下图:
一、数据库及表结构
数据库:test
表:micro_blog(仅仅有一个表)字段:id,title,date,content,hits
表结构如下:
CREATE TABLE `micro_blog` (
`id` int(20) unsigned NOT NULL AUTO_INCREMENT,
`title` text NOT NULL ,
`content` longtext NOT NULL,
`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`hits` int(20) DEFAULT 0,
PRIMARY KEY (`ID`)
)ENGINE=MyISAM DEFAULT CHARSET=utf8;
二、文件
文件详细描述
文件 描述
default.php 默认主页。显示博文与操作连接。
add.php 添加新博文的功能模块。
edit.php 对已经添加过的博文进行修改操作。
delete.php 删除博文模块。
view.php 显示博文的详细信息(标题|添加日期|浏览次数|内容)。
conn.php 链接数据库操作。在其它文件中被引用。
conn.php
<?php
//连接MySql数据库服务
$conn = @mysql_connect("localhost:3306","root","www.361way.com") or die("连接数据库服务器失败!");
//连接ly_php_base数据库
@mysql_select_db("test",$conn) or die("未能连接到数据库!");
mysql_query("SET NAMES 'UTF8'");
?>
注:后面的set names utf8,如果不执行,会出现插入数据库中的汉字会变成乱码。
default.php
<?php
include("conn.php");
//搜索关键字的管理
if(!empty($_GET['keys'])){
$keys = "WHERE title like '%".$_GET['keys']."%'";
} else {
$keys = "";
}
$sql = "SELECT * FROM micro_blog ".$keys." ORDER BY id DESC LIMIT 10";
$query = mysql_query($sql);
$rs = mysql_fetch_array($query);
?>
<html>
<head>
<title>我的微博客主页</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<a href="add.php">添加内容</a>
<form action="" method="get">
<input type="text" name="keys"/>
<input type="submit" name="submit" value="内容搜索"/>
</form>
<hr color="#FF9900" size="3" />
<?php
if(!$rs){
echo "没有相关内容!";
}
//没有实现分页导航功能
while($rs){
?>
<h2>标题:<?php echo $rs['title'];?>|<a href="edit.php?id=<?php echo $rs['id'];?>">编辑</a>|<a href="delete.php?id=<?php echo $rs['id'];?>">删除</a></h2>
<li>日期:<?php echo $rs['date'];?></li>
<p>内容<?php echo iconv_substr($rs['content'],0,50,"UTF-8");?>...... <a href="view.php?id=<?php echo $rs['id'];?>">|查看详细内容|</a></p>
<hr color="#0033FF" size="5" />
<?php
$rs = mysql_fetch_array($query);
}
?>
</body>
</html>
add.php
<?php
//引入连接数据库文件
include("conn.php");
if(!empty($_POST['submit'])){
$title = $_POST['title'];
$content = $_POST['content'];
$sql = "INSERT INTO micro_blog VALUES(NUll,'$title','$content',now(),0)";
mysql_query($sql);
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>发布微博页面</title>
</head>
<body>
<a href="default.php">查看内容</a>
<hr color="#0033CC" size="3px"/>
<form action="add.php" method="post">
标题:
<input type="text" name="title"/>
<br />
内容:
<textarea rows="5" cols="50" name="content"></textarea>
<br />
<input type="submit" name="submit" value="提交"/>
<br />
</form>
</body>
</html>
edit.php
<?php
include("conn.php");
if(!empty($_GET['id'])){
$id = $_GET['id'];
$sql = "select * from micro_blog where id = ".$_GET['id'];
$query = mysql_query($sql);
$rc = mysql_fetch_array($query);
}
if(!empty($_POST['update'])){
echo "更新按钮提交成功!";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>编辑页面</title>
</head>
<body>
<form action="edit.php?id=<?php echo $id;?>" method="post">
标题:
<input type="text" name="title" value="<?php echo $rc['title'];?>"/>
<br />
内容:
<textarea rows="5" cols="50" name="content"><?php echo $rc['content'];?></textarea>
<br />
<input type="submit" name="update" value="更新"/>
<br />
</form>
</body>
</html>
delete.php
<?php
include("conn.php");
if(!empty($_GET['id'])){
mysql_query("delete from micro_blog where id =".$_GET['id']);
} else {
echo "参数引入失败!";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><?php echo $rc['title'];?>|我的微博客</title>
</head>
<body>
<a href="default.php">返回主页面</a>
<hr color="#00FFFF" size="5px"/>
<h2><?php echo $rc['title'];?>
<hr color="#006699" size="3px">
</h2>
<li><?php echo "日期:".$rc['date']."|浏览次数:".$rc['hits'];?></li>
<p><?php echo $rc['content'];?></p>
</body>
</html>
view.php
<?php
include("conn.php");
if(!empty($_GET['id'])){
$sql = "SELECT * FROM micro_blog WHERE id = ".$_GET['id'];
$rc = mysql_fetch_array(mysql_query($sql));
mysql_query("UPDATE micro_blog SET hits = hits + 1 WHERE id = ".$_GET['id']);
} else {
echo "参数引入失败!";
}
?>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title><?php echo $rc['title'];?>|我的微博客</title>
</head>
<body>
<a href="default.php">返回主页面</a>
<hr color="#00FFFF" size="5px"/>
<h2><?php echo $rc['title'];?>
<hr color="#006699" size="3px">
</h2>
<li><?php echo "日期:".$rc['date']."|浏览次数:".$rc['hits'];?></li>
<p><?php echo $rc['content'];?></p>
</body>
</html>
大概逻辑:
后台操作一个订单发货的时候进行自动分成,后台取消发货,退货,改为未发货的时候去掉自动分成部分。
核心代码:lib_common.php
//分成积分计算 function fenchenjifen($usertype=3,$point){ $affiliate = unserialize($GLOBALS['_CFG']['affiliate']); if($usertype==3){ //采购 if ($affiliate['config']['level_register_up']) { $affiliate['config']['level_register_up'] /= 100; } $point_cg = round($affiliate['config']['level_register_up'] * intval($point), 0); return $point_cg; } if($usertype==1){//经销商 if ($affiliate['config']['level_money_all']) { $affiliate['config']['level_money_all'] /= 100; } $point_cg = round($affiliate['config']['level_money_all'] * intval($point), 0); return $point_cg; } if($usertype==2){//财务 if ($affiliate['config']['level_register_all']) { $affiliate['config']['level_register_all'] /= 100; } $point_cg = round($affiliate['config']['level_register_all'] * intval($point), 0); return $point_cg; } } /** * * @param undefined $order 订单信息 * @param undefined $buyuser 购买者信息 * @param undefined $integral 计算积分 * $type = 1 增加 $type=-1 撤销 * 分成log状态99 */ function fun_fencheng_change($order,$buyuser,$integral=array(),$type=1){//店铺分成计算 if(intval($order['parent_shopid'])==0) return false; if(!is_array($buyuser)) return false; $order_id=$order['order_id']; $separate_by=99; switch($buyuser['usertype']){ case '0'://购买者类型 $row = $GLOBALS['db']->getRow("SELECT * from " . $GLOBALS['ecs']->table('users') . " u ". " WHERE u.shopid =".$order['parent_shopid']." and u.usertype=1" );//获取pid $up_uid = $row['user_id']; if(!empty($up_uid) && $up_uid > 0) { $money=$point=0; $point= fenchenjifen(1,$integral['custom_points']); // $info = sprintf($GLOBALS['_LANG']['separate_info'], $order['order_sn'], $money, $point); $info="订单".$order['order_sn']."分成获得积分:".$point; log_account_change($up_uid, $money, 0, ($type)*$point, ($type)*$point, $info); //var_dump($info); if($type==1){ write_affiliate_log1($order_id, $up_uid, $row['user_name'], $money, $point, $separate_by); }else{ rollback_affiliate_log($order_id); } $orderupdate['is_separate']=$type==1?$separate_by:0; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), $orderupdate, 'UPDATE', "order_id = '$order_id'"); } break; case '3': $row = $GLOBALS['db']->getAll("SELECT u.shopid,u.user_id,u.usertype, u.user_name FROM " . $GLOBALS['ecs']->table('users') . " u ". " WHERE u.shopid= ".$order['parent_shopid']." and u.usertype in (1,2)"); foreach($row as $val){ // 经销商和财务获得分成 if($val['usertype']==1){ $pointf = fenchenjifen(1,$integral['custom_points']); } if($val['usertype']==2){ $pointf = fenchenjifen(2,$integral['custom_points']); } $up_uid = $val['user_id']; //$info = sprintf($GLOBALS['_LANG']['separate_info'], $order['order_sn'], $money, $pointf); $info="订单".$order['order_sn']."分成获得积分:".$pointf; log_account_change($up_uid, $money, 0, ($type)*$pointf, ($type)*$pointf, $info); if($type==1){ write_affiliate_log1($order_id, $up_uid, $val['user_name'], $money, $pointf, $separate_by); }else{ rollback_affiliate_log($order_id); } $orderupdate['is_separate']=$type==1?$separate_by:0; $GLOBALS['db']->autoExecute($GLOBALS['ecs']->table('order_info'), $orderupdate, 'UPDATE', "order_id = '$order_id'"); } break; } return true; } /** * * @param undefined $oid * @param undefined $uid * @param undefined $username * @param undefined $money * @param undefined $point * @param undefined $separate_by * 写入订单分成 log */ function write_affiliate_log1($oid, $uid, $username, $money, $point, $separate_by) { $time = gmtime(); $sql = "INSERT INTO " . $GLOBALS['ecs']->table('affiliate_log') . "( order_id, user_id, user_name, time, money, point, separate_type)". " VALUES ( '$oid', '$uid', '$username', '$time', '$money', '$point', $separate_by)"; if ($oid) { $GLOBALS['db']->query($sql); } } //撤销订单分成 function rollback_affiliate_log($order_id,$falg=-2){ $sql = "UPDATE " . $GLOBALS['ecs']->table('affiliate_log') . " SET separate_type = '$falg'" . " WHERE order_id = '$order_id'"; $GLOBALS['db']->query($sql); }
需要注意的点:
后台发货程序在admin/order.php
需要修改的地方有: 发货 866行 ,取消发货 1035行 改为未发货 3961行 退货4132行。
本代码只计算分成部分。自己下单部分另外。
这个代码是按照店铺ID分成,多商户的。为ecshop二次开发版。无法用于原版。
调用分成: fun_fencheng_change($order,$user,$integral,1);
取消分成: fun_fencheng_change($order,$user,$integral,-1);
在php中可以用$_SERVER['HTTP_USER_AGENT']来区分是android、ios还是wp的请求,具体可以用以下代码来实现:
$userAgent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match("/(iPod|iPad|iPhone)/", $userAgent))
{
echo 'ios'; //IOS客户端
}
elseif (preg_match("/WP/", $userAgent))
{
echo 'wp'; //WinPhone客户端
}
elseif (preg_match("/android/i", $userAgent)) {
echo 'android'; //android客户端
}
当然我也可以在网页头部加上一段js代码效果是一样的
<script type="text/javascript">
try {
var urlhash = window.location.hash;
if ( !urlhash.match("fromapp") ) {
if ( (navigator.userAgent.match(/(iPhone|iPod|Android|ios|iPad|SymbianOS|Windows Phone)/i) )) {
window.location = "http://m.111cn.net";
}
}
}
catch(err) {
}
</script>
这样只要是手机访问网站就会自动到了手机版本网站了
相关文章
- 这篇文章主要介绍了cmd下过滤文件名称的两种方法,需要的朋友可以参考下...2020-06-30
- 经常制作开发不同的网站的后台,写过很多种不同的后台导航写法。 最终积累了这种最写法,算是最好的吧...2013-09-29
- 这篇文章主要介绍了js中flexible.js实现淘宝弹性布局方案,需要的朋友可以参考下...2015-12-25
- 这篇文章主要介绍了PHP正则表达式过滤html标签属性的相关内容,实用性非常,感兴趣的朋友参考下吧...2016-05-06
- 这篇文章主要介绍了JavaScript过滤字符串中的中文与空格方法汇总 的相关资料,需要的朋友可以参考下...2016-03-09
- 一位站长译的一个国外的如何判断用户是否访问过某个网址文章,个人感觉写得非常不错,下面分享一下。 我们经常有这样的需求:想知道用户之前有没有访问过某个网址。有...2016-09-20
- C# 撒列实现关键字过滤的实例,需要的朋友可以参考一下...2020-06-25
- 中文网址对于许多的地方是不兼容的但只要转换在uft8好像又可以解决了,下面来看一篇安卓中Picasso加载中文网址失败的解决方法,具体如下 写这篇博客之前,也是先感叹一...2016-10-02
- 这篇文章主要介绍了Python过滤序列元素的方法,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下...2020-07-31
- 这篇文章主要介绍了C#实现简单过滤非法字符的方法,涉及C#针对字符串遍历与判断的相关技巧,非常简单实用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了ASP.NET过滤HTML字符串方法总结,需要的朋友可以参考下...2021-09-22
- 这篇文章主要介绍了python基础之停用词过滤详解,文中有非常详细的代码示例,对正在学习python基础的小伙伴们有很好地帮助,需要的朋友可以参考下...2021-04-20
- 这两个月来,因为工作的需要,对 Web 相关的技术做了一点研究,经过在自己的 站点 上一点实践。觉得自己还算略有心得[实际上是刚刚入门的啦:)]。 本着学以致用的原则...2016-09-20
- 今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说化妆品瓶子类淘宝美工的教程,各位想知道具体教程的使用者们,那么大家就快来跟着小编来看下吧。 ...2016-09-14
雷军双11将做客淘宝头条官方问答节目 现场送小米MIX F码
今天,小米公司宣布,雷军将于11月11日下午3点做客淘宝头条官方问答节目,和大家聊一聊新品手机小米Note2和全面屏概念手机小米MIX背后的“黑科技”。在活动中,雷军还将现场派送小米MIX的F码,拿到之后无需抢购即可入手小米MIX...2016-12-15- 最近听说备案审核越来越严了,我也小担心了下,本来以为买域名的地方可以代备案的,不巧他们刚好不能访问备案网站(说是暂时的)。我按照备案的流程,以个人的名义备了案,结果令...2017-07-06
- 今天小编在这里就来给各位photoshop的这一款软件的使用者们来说一说淘宝化妆品修图的实例教程,各位想知道具体修图教程的使用者们,那么大家就快来跟着小编来看看教程吧...2016-09-14
- 这篇文章主要给大家介绍了关于短网址的原理与生成方法,利用的是Java实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-10-02
- 下面小编就为大家带来一篇jquery过滤特殊字符',防sql注入的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-08-24
- 最近做的一个Web项目需要对URL进行过滤,在网上搜了一下,知道J2EE有个Filter的东西,而在.NET方面,其实也可以实现...2021-09-22