<?php
/***
* SQL过滤器类
* Project: SQL filter
* This is a freeware
* Site: http://www.cnblogs.com/lsl8966/
* $Id: filter.class.php 108 2012-05-20 09:39:01Z lsl8966 $
* Copyright (C) 2012-2013 gznc.edu.cn Developer Team. All Rights Reserved.
*/
class filter{
public $str;
Private $keyword= '=|===|==|<>|or|and|exec|insert|select|delete|update|count|*|'
.'%|chr|mid|master|truncate|char|declare|execute|create|drop|grant|declared|from';
/**
* 关键字统计
* @Param string $str 源字符串
* @return array 统计出每一个关键字出现的次数和总数,并返回一个数组
*/
public function strFilter($str){
/* 自定义关键词 */
$kArray = explode('|',$this->keyword);
$cArray = $this->full_count_words($str);
$rArray = array();
foreach( $kArray as $k=>$v ){
if($cArray[$v]>0){
$rArray[$v] = $cArray[$v];
$rArray['count'] += $cArray[$v];
}
}
return $rArray;
}
/**
* 单引号处理
* @Param string $str 源字符串
* @return string 替换后的字符串
*/
public function strReplace($str){
str_replace("\'","'",$str);
return str_replace("'","\'",$str);
}
/**
* 转义处理
* @Param string $str 源字符串
* @return string 替换后的字符串
*/
public function strChecked($value)
{
/* 去除斜杠 */
if (!get_magic_quotes_gpc())
{
$value = stripslashes($value);
}
/* 如果不是数字则加引号 */
if (!is_numeric($value))
{
$value = "'" . mysql_real_escape_string($value) . "'";
}
return $value;
}
/**
*统计单词个数
*@Param String $str 源字符串
*@return Array 返回一个统计过后的数组,分别记录每一个单词出现的次数
**/
public function full_count_words($str) {
/* 返回完整数组,包含字符串里每个单词 */
$words = str_word_count($str,1);
$result = array();
foreach ($words as $w) {
$lw = strtolower($w);
//判断单词是否是第一次出现,是则设置为1,否则就增加1
if (!(isset($result[$lw]))) {
$result[$lw] = 1;
} else {
$result[$lw]++;
}
}
return $result;
}
/**
* 统计参数个数
* @return 返回参数的个数
*/
public function parsh_url(){
echo count($_REQUEST);
}
}
/* 实例 */
$s = new filter;
$r = $s->strFilter($_GET[id]);
if($r['count']>0){
echo '请您进行合法输入,你的输入里面含有<font color=red>'.$r['count'].'</font>个关键词!';
} else {
echo $s->strReplace($_GET['id']);
}
?>