您当前的位置:首页 > CMS常见问题 > 帝国cms常见问题 >

帝国cms RepPostVar()参数处理函数代码注释

0
<?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)或者&#xFFFD;(其他),而不是返回空字符串。
//ENT_DISALLOWED 为文档的无效代码点替换为Unicode代替符(Replacement Character):U+FFFD(UTF-8)或&#xFFFD;(其他),而不是把它们留在原处。比如以下情况下就很有用:要保证XML文档嵌入额外内容时格式合法。
//ENT_HTML401 以HTML 4.01处理代码
//ENT_XML1 以XML 1处理代码
//ENT_XHTML 以XHTML处理代码
//ENT_HTML5 以HTML5处理代码

//htmlspecialchars()函数把预定义的字符转换为HTML实体
//预定义的字符是:
//&(和号)会被转换成&amp;
//"(双引号)会被转换成&quot;
//'(单引号)会被转换成&#039;
//<(小于)会被转换成&lt;
//>(大于)会被转换成&gt;

//支持的字符集列表
//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;
}
?>
顶部中部底部