验证表单中输入的特殊字符
1.前台表单通过js过滤掉特殊字符
function stripscript(s) { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\].<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?\"]"); var rs = ""; for (var i = 0; i < s.length; i++) { rs = rs + s.substr(i, 1).replace(pattern, ''); } return rs; } var username = stripscript($.trim($('#username').val())); //对过滤掉特殊字符的字符串进行进一步判断 if(username =='') { error += '收货人不能为空\n'; is_error = 1; } if(is_error > 0){ alert(error); return ; }else{ $("form").submit(); }
2.后台代码对特殊字符进行转化
1 $params = $_GET; 2 foreach($params as $k => $v){ 3 $params[$k] = clean($v); 4 } 5 --将数据存入数据库(省略) 6 public function clean($str) 7 { 8 return addslashes(xssClean($str)); 9 } 10 11 //去掉js和html 12 static private function _xssClean($str) 13 { 14 $_search = array( 15 "'<script[^>]*?>.*?</script>'si", // 去掉 javascript 16 "'<[\/\!]*?[^<>]*?>'si", // 去掉 HTML 标记 17 "'([\r\n])[\s]+'", // 去掉空白字符 18 "'&(quot|#34);'i", // 替换 HTML 实体 19 "'&(amp|#38);'i", 20 "'&(lt|#60);'i", 21 "'&(gt|#62);'i", 22 "'&(nbsp|#160);'i" 23 ); 24 $_replace = array( // 作为 PHP 代码运行 25 '', 26 '', 27 "\\1", 28 "\"", 29 "&", 30 "<", 31 ">", 32 '' 33 ); 34 $str = trim($str); 35 if (strlen($str) <= 0) 36 return $str; 37 return @preg_replace_callback($_search, $_replace, $str); 38 }
3.遇到这样一种情况,后台需要输入双引号和单引号,然后存进数据库后还需要显示出来。
1.在存入数据库之前,后台php程序对传过来的包含双引号单引号的字符串转义
addcslashes($str,"'\"");
2.前台在input的value中显示,就会出现双引号后面的字符串不显示,这就需要将读出来的双引号和单引号转化成转义字符
echo str_replace('"', '"', str_replace("'", ''', $value));