Filter.class.php 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. <?php
  2. namespace KIF\String;
  3. /**
  4. *
  5. * 数据过滤处理类
  6. * @author gaoxiaogang@gmail.com
  7. *
  8. */
  9. class Filter {
  10. /**
  11. *
  12. * 过滤方法:htmlspecialchars
  13. * @var string
  14. */
  15. const HTMLSPECIALCHARS = 'htmlspecialchars';
  16. /**
  17. *
  18. * 过滤方法:strip_tags
  19. * @var string
  20. */
  21. const STRIP_TAGS = 'strip_tags';
  22. const STRIP_SELECTED_TAGS = 'strip_selected_tags';
  23. const STRIP_SCRIPT = 'strip_script';
  24. const TRIM = 'trim';
  25. static private $filters = array(
  26. self::HTMLSPECIALCHARS,
  27. self::STRIP_TAGS,
  28. self::STRIP_SELECTED_TAGS,
  29. self::STRIP_SCRIPT,
  30. self::TRIM,
  31. );
  32. /**
  33. *
  34. * 是否有效的过滤方法
  35. * @param string $handle
  36. * @return boolean
  37. */
  38. static public function isValid($filter) {
  39. return in_array($filter, self::$filters);
  40. }
  41. /**
  42. *
  43. * 把html标签转化为字符串html
  44. * @param string $content
  45. * @return string
  46. */
  47. static public function htmlspecialchars($content, $options = null) {
  48. if (is_null($options)) {
  49. $options = ENT_QUOTES;
  50. }
  51. return htmlspecialchars($content, $options, "UTF-8");
  52. }
  53. /**
  54. *
  55. * 从字符串中去除 HTML 和 PHP 标记
  56. * @param string $content 输入字符串
  57. * @param string $allowable_tags 使用可选的第二个参数指定不被去除的字符列表
  58. * HTML 注释和 PHP 标签也会被去除。这里是硬编码处理的,所以无法通过 allowable_tags 参数进行改变。
  59. * @return string
  60. */
  61. static public function strip_tags($content, $allowable_tags = null) {
  62. return strip_tags($content, $allowable_tags);
  63. }
  64. /**
  65. *
  66. * 与 strip_tags 相反,只去除参数$stripable_tags里指定的标签
  67. * @param string $content 输入字符串
  68. * @param string $stripable_tags 使用可选的第二个参数指定被去除的字符列表
  69. * @return string
  70. */
  71. static public function strip_selected_tags($content, $stripable_tags = null) {
  72. if (is_null($stripable_tags)) {
  73. $stripable_tags = '';
  74. }
  75. preg_match_all("/<([^>]+)>/i", $stripable_tags, $allTags, PREG_PATTERN_ORDER);
  76. foreach ($allTags[1] as $tag){
  77. $content = preg_replace('/<\/?'.$tag."[^>]*>/iU","",$content);
  78. }
  79. return $content;
  80. }
  81. /**
  82. *
  83. * 去除script标签
  84. * @param string $content 输入字符串
  85. * @return string
  86. */
  87. static public function strip_script($content) {
  88. return self::strip_selected_tags($content, "<script>");
  89. }
  90. /**
  91. *
  92. * 去除首尾空格
  93. * @param string $content 输入字符串
  94. * @return string
  95. */
  96. static public function trim($content) {
  97. return trim($content);
  98. }
  99. /**
  100. * 过滤数组中的空值,并对非空值做trim处理
  101. * #支持对多维数组的处理
  102. * @param array $input
  103. * @param boolean $htmlspecialchars // html转义,默认:false 不做转义
  104. * @param array
  105. */
  106. static public function arrayfilter(array $input, $htmlspecialchars = false) {
  107. if (!is_array($input)) {
  108. return $input;
  109. }
  110. $result = array();
  111. foreach ($input as $key => $value) {
  112. if (is_scalar($value)) {
  113. $tmp_value = trim($value);
  114. if (empty($tmp_value)) {
  115. continue;
  116. }
  117. $result[$key] = $htmlspecialchars ? htmlspecialchars(trim($value)) : trim($value);
  118. } else if(is_array($value)){
  119. if (empty($value)) {
  120. continue;
  121. }
  122. $tmp_arr = self::arrayfilter($value, $htmlspecialchars);
  123. if (empty($tmp_arr)) {
  124. continue;
  125. }
  126. $result[$key] = $tmp_arr;
  127. } else {
  128. $result[$key] = $htmlspecialchars ? htmlspecialchars($value) : $value;
  129. }
  130. }
  131. return $result;
  132. }
  133. }