123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- <?php
- namespace KIF\String;
- /**
- *
- * 数据过滤处理类
- * @author gaoxiaogang@gmail.com
- *
- */
- class Filter {
- /**
- *
- * 过滤方法:htmlspecialchars
- * @var string
- */
- const HTMLSPECIALCHARS = 'htmlspecialchars';
- /**
- *
- * 过滤方法:strip_tags
- * @var string
- */
- const STRIP_TAGS = 'strip_tags';
- const STRIP_SELECTED_TAGS = 'strip_selected_tags';
- const STRIP_SCRIPT = 'strip_script';
- const TRIM = 'trim';
- static private $filters = array(
- self::HTMLSPECIALCHARS,
- self::STRIP_TAGS,
- self::STRIP_SELECTED_TAGS,
- self::STRIP_SCRIPT,
- self::TRIM,
- );
- /**
- *
- * 是否有效的过滤方法
- * @param string $handle
- * @return boolean
- */
- static public function isValid($filter) {
- return in_array($filter, self::$filters);
- }
- /**
- *
- * 把html标签转化为字符串html
- * @param string $content
- * @return string
- */
- static public function htmlspecialchars($content, $options = null) {
- if (is_null($options)) {
- $options = ENT_QUOTES;
- }
- return htmlspecialchars($content, $options, "UTF-8");
- }
- /**
- *
- * 从字符串中去除 HTML 和 PHP 标记
- * @param string $content 输入字符串
- * @param string $allowable_tags 使用可选的第二个参数指定不被去除的字符列表
- * HTML 注释和 PHP 标签也会被去除。这里是硬编码处理的,所以无法通过 allowable_tags 参数进行改变。
- * @return string
- */
- static public function strip_tags($content, $allowable_tags = null) {
- return strip_tags($content, $allowable_tags);
- }
- /**
- *
- * 与 strip_tags 相反,只去除参数$stripable_tags里指定的标签
- * @param string $content 输入字符串
- * @param string $stripable_tags 使用可选的第二个参数指定被去除的字符列表
- * @return string
- */
- static public function strip_selected_tags($content, $stripable_tags = null) {
- if (is_null($stripable_tags)) {
- $stripable_tags = '';
- }
- preg_match_all("/<([^>]+)>/i", $stripable_tags, $allTags, PREG_PATTERN_ORDER);
- foreach ($allTags[1] as $tag){
- $content = preg_replace('/<\/?'.$tag."[^>]*>/iU","",$content);
- }
- return $content;
- }
- /**
- *
- * 去除script标签
- * @param string $content 输入字符串
- * @return string
- */
- static public function strip_script($content) {
- return self::strip_selected_tags($content, "<script>");
- }
- /**
- *
- * 去除首尾空格
- * @param string $content 输入字符串
- * @return string
- */
- static public function trim($content) {
- return trim($content);
- }
-
- /**
- * 过滤数组中的空值,并对非空值做trim处理
- * #支持对多维数组的处理
- * @param array $input
- * @param boolean $htmlspecialchars // html转义,默认:false 不做转义
- * @param array
- */
- static public function arrayfilter(array $input, $htmlspecialchars = false) {
- if (!is_array($input)) {
- return $input;
- }
-
- $result = array();
- foreach ($input as $key => $value) {
- if (is_scalar($value)) {
- $tmp_value = trim($value);
- if (empty($tmp_value)) {
- continue;
- }
- $result[$key] = $htmlspecialchars ? htmlspecialchars(trim($value)) : trim($value);
- } else if(is_array($value)){
- if (empty($value)) {
- continue;
- }
-
- $tmp_arr = self::arrayfilter($value, $htmlspecialchars);
- if (empty($tmp_arr)) {
- continue;
- }
-
- $result[$key] = $tmp_arr;
- } else {
- $result[$key] = $htmlspecialchars ? htmlspecialchars($value) : $value;
- }
-
- }
-
- return $result;
- }
- }
|