帝国cms的ehtmlspecialchars函数,二次开发中经常会用到。该函数可以把一些预定义的字符转换为HTML实体,返回转换后的新字符串,原字符串不变。用于防止别人提交html代码进行攻击, 比如我发帖时提交HTML代码, 代码里含有攻击性代码 .. 那么接收时进行htmlspecialchars转换 就可以让代码不生效.
函数在:/e/class/function.php 中,代码如下:
//htmlspecialchars处理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;}
被转换的预定义的字符有:
&:转换为&":转换为"':转换为成为 '<:转换为<>:转换为>
$flags可选参数还有
可用的引号类型:
ENT_COMPAT - 默认。仅编码双引号。
ENT_QUOTES - 编码双引号和单引号。
ENT_NOQUOTES - 不编码任何引号。
无效的编码:
ENT_IGNORE - 忽略无效的编码,而不是让函数返回一个空的字符串。应尽量避免,因为这可能对安全性有影响。
ENT_SUBSTITUTE - 把无效的编码替代成一个指定的带有 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD; 的字符,而不是返回一个空的字符串。
ENT_DISALLOWED - 把指定文档类型中的无效代码点替代成 Unicode 替代字符 U+FFFD(UTF-8)或者 &#FFFD;。
规定使用的文档类型的附加 flags:
ENT_HTML401 - 默认。作为 HTML 4.01 处理代码。
ENT_HTML5 - 作为 HTML 5 处理代码。
ENT_XML1 - 作为 XML 1 处理代码。
ENT_XHTML - 作为 XHTML 处理代码。