<?php //参数处理函数 function RepPostVar($val){ //不考虑指令magic_quotes_gpc是否开启, 如果参数$val不等于addslashes($val)就退出 if($val!=addslashes($val)){ exit(); } CkPostStrChar($val); $val=str_replace("%","",$val);//删除所有的百分号字符 $val=str_replace(" ","",$val);//删除所有的空格 $val=str_replace("\t","",$val);//删除所有的\t制表符 $val=str_replace("%20","",$val);//删除所有的rawurlencode(" ") $val=str_replace("%27","",$val);//删除所有的rawurlencode("'") $val=str_replace("*","",$val);//删除所有的星号 $val=str_replace("'","",$val);//删除所有的单引号 $val=str_replace("\"","",$val);//删除所有的双引号 $val=str_replace("/","",$val);//删除所有的正斜杠 $val=str_replace(";","",$val);//删除所有的分号 $val=str_replace("#","",$val);//删除所有的井号 $val=str_replace("--","",$val);//删除所有的自减运算符 $val=RepPostStr($val,1); $val=addslashes($val); //FireWall FWClearGetText($val); return $val; } //处理编码字符 function CkPostStrChar($val){ //返回参数$val最后一个字符串 if(substr($val,-1)=="\\") { //如果参数$val最后一个字符等于反斜杠就退出 exit(); } } //addslashes 使用反斜线引用字符串 //string addslashes(string $str) //返回字符串,该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号、双引号、反斜线与NUL(NULL字符)。 function AddAddsData($data){ //如果关闭了魔术引号,则addslashes if(!MAGIC_QUOTES_GPC){ $data=addslashes($data); } return $data; } //string stristr(string $haystack, mixed $needle [,bool $before_needle=false]) //返回haystack字符串从needle第一次出现的位置开始到haystack结尾的字符串。 //haystack 在该字符串中查找。 //needle 如果needle不是一个字符串,那么它将被转换为整型并被视为字符顺序值。 //before_needle 若为TRUE,将返回needle在haystack中的位置之前的部分(不包括needle)。 //参数needle和haystack将以不区分大小写的方式对待。 //返回匹配的子字符串,如果needle未找到,返回false。 //检查敏感字符 function FWClearGetText($str){ global $ecms_config; //开启防火墙(0为关闭,1为开启) if(empty($ecms_config['fw']['eopen'])){ return ''; } //屏蔽提交敏感字符,多个用半角逗号格开 if(empty($ecms_config['fw']['cleargettext'])){ return ''; } $r=explode(',',$ecms_config['fw']['cleargettext']); $count=count($r); for($i=0;$i<$count;$i++){ if(stristr($str,$r[$i])){ FWShowMsg('Post String'); } } } function FWShowMsg($msg){exit();} //处理提交字符 function RepPostStr($val,$ecms=0){ $val=ehtmlspecialchars($val,ENT_QUOTES);//既转换双引号也转换单引号 if($ecms==0){ CkPostStrChar($val); $val=AddAddsData($val); //FireWall FWClearGetText($val); } return $val; } //htmlspecialchars 将特殊字符转换为HTML实体 //string htmlspecialchars(string $string [,int $flags=ENT_COMPAT | ENT_HTML401 [,string $encoding=ini_get("default_charset") [,bool $double_encode=true]]]) //某类字符在HTML中有特殊用处,如需保持原意,需要用HTML实体来表达。本函数会返回字符转义后的表达。如需转换子字符串中所有关联的名称实体,使用htmlentities()代替本函数。 //string 待转换的string //flags 位掩码,由以下某个或多个标记组成,设置转义处理细节、无效单元序列、文档类型。默认是ENT_COMPAT|ENT_HTML401。 //有效的flags常量 //ENT_COMPAT 会转换双引号,不转换单引号。 //ENT_QUOTES 既转换双引号也转换单引号。 //ENT_NOQUOTES 单/双引号都不转换。 //ENT_IGNORE 静默丢弃无效的代码单元序列,而不是返回空字符串。不建议使用此标记,因为它可能有安全影响。 //ENT_SUBSTITUTE 替换无效的代码单元序列为Unicode代替符,U+FFFD(UTF-8)或者�(其他),而不是返回空字符串。 //ENT_DISALLOWED 为文档的无效代码点替换为Unicode代替符(Replacement Character):U+FFFD(UTF-8)或�(其他),而不是把它们留在原处。比如以下情况下就很有用:要保证XML文档嵌入额外内容时格式合法。 //ENT_HTML401 以HTML 4.01处理代码 //ENT_XML1 以XML 1处理代码 //ENT_XHTML 以XHTML处理代码 //ENT_HTML5 以HTML5处理代码 //htmlspecialchars()函数把预定义的字符转换为HTML实体 //预定义的字符是: //&(和号)会被转换成& //"(双引号)会被转换成" //'(单引号)会被转换成' //<(小于)会被转换成< //>(大于)会被转换成> //支持的字符集列表 //ISO-8859-1 西欧,Latin-1 //ISO-8859-5 Little used cyrillic charset(Latin/Cyrillic) //ISO-8859-15 西欧,Latin-9。增加欧元符号,法语和芬兰语字母在Latin-1(ISO-8859-1)中缺失。 //UTF-8 ASCII兼容的多字节8位Unicode。 //cp866 DOS特有的西里尔编码。本字符集在4.3.2版本中得到支持。 //cp1251 Windows特有的西里尔编码。本字符集在4.3.2版本中得到支持。 //cp1252 Windows特有的西欧编码。 //KOI8-R 俄语。本字符集在4.3.2版本中得到支持。 //BIG5 繁体中文,主要用于中国台湾省。 //GB2312 简体中文,中国国家标准字符集。 //BIG5-HKSCS 繁体中文,附带香港扩展的Big5字符集。 //Shift_JIS 日语 //EUC-JP 日语 //MacRoman Mac操作系统(Mac OS)使用的字符串。 //double_encode 可选,布尔值,规定了是否编码已存在的HTML实体。 //TRUE 默认,将对每个实体进行转换。 //FALSE 不会对已存在的HTML实体进行编码。 //返回编码后的字符,如果指定的编码encoding里,string包含了无效的代码单元序列,没有设置ENT_IGNORE或者ENT_SUBSTITUTE标记的情况下,会返回空字符串。 //更新日志 //5.6.0 The default value for the encoding parameter was changed to be the value of the default_charset configuration option(配置选项)。 //5.4.0 encoding参数的默认值改成UTF-8。 //5.4.0 增加常量ENT_SUBSTITUTE、ENT_DISALLOWED、ENT_HTML401、ENT_XML1、ENT_XHTML、ENT_HTML5。 //5.3.0 增加常量ENT_IGNORE。 //5.2.3 增加参数double_encode。 function ehtmlspecialchars($val,$flags=ENT_COMPAT){//默认会转换双引号,不转换单引号。 global $ecms_config; if(PHP_VERSION>='5.4.0'){ if($ecms_config['sets']['pagechar']=='utf-8'){ $char='UTF-8'; }else{ $char='ISO-8859-1'; } $val=htmlspecialchars($val,$flags,$char); }else{ $val=htmlspecialchars($val,$flags); } return $val; } ?>