- <?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;
- }
- ?>
|
暂无评论
发表评论