PHP小技巧 防XSS

来源:互联网 发布:mac迅雷开机自动启动 编辑:程序博客网 时间:2024/05/04 00:01

htmlspecialchars();用这个函数编译一下表单提交时的数据可以防XSS

urlencode(); 如果你在拼写url链接时传递的参数中有特殊字符,导致get时无法正确获得值,那么用这个函数编译一下url地址


使用ajax传递参数时最好用encodeURIComponent();编译一下传送的值,可以避免获取不到参数的问题

onclick="this.form.reset();return false;"  //重置表单事件

http_build_query ( array formdata [, string numeric_prefix])
根据数组产生一个urlencode之后的请求字符串,如果在基础数组中使用了数字下标同时给出了 numeric_prefix参数。
<?php
$data
 = array('foo'=>'bar',
              
'baz'=>'boom',
              
'cow'=>'milk',
              
'php'=>'hypertext processor');
              
echo
 http_build_query($data);
输出:
      foo=bar&baz=boom&cow=milk&php=hypertext+processor
?> 
附加一个jquery  ajax小例子
 <script type="text/javascript">      
$(document).ready(function(){//这个就是jQueryready ,它就像C语言的main 所有操作包含在它里面
             $("#send_mail_button").click(function(){
             getajax(); //点击ID为"send_mail_button"的按钮后触发函数 getajax();
             });
             });
    function getajax(){
    var content = $("textarea#send_mail_content").val();//获取对象值  。。。你懂的
    $.ajax(
            {    type: "post",
                 url:'/index.php?r=user/getajax',
                 data: 'content='+encodeURIComponent(content), //编译传递的参数
                 //dataType:'json',
                 success: function(json){  //接收传回来的值                
                    document.getElementById("send_mail_span").innerHTML="<font style='color:red;'>"+json+"</font>"//输出到id为send_mail_span的span里
                 }
            }
     )
}


</script>
html事件延时提交
例如:
   <form method="post" onsubmit="setTimeout(contentajax,10);return false;">
如果用到编辑器的话就会用到这个。。。不多解释
鼠标手型:cursor:pointer
css不变形:OVERFLOW: auto; 如果你的页面总是出现被内容挤的变形可以用这个试试,或者:overflow:hideen
面对大量表单处理,表单中有复选框的情况你是不是很无助?name="checkboxname[]" 试试这种给复选框命名的方法会提交什么数据(数组);可是显示的时候你又会遇到怎么让它默认被选中呢?两种方法适当选择
1.(默认选择一个,读取到在选中)<input type="checkbox" name="business[]" <?php if(in_array('Other',$reg->business)) echo("checked");?> value="Other"/>
(看一下数组里是不是含有这个值。)
2.(默认全选如果读取到则按读取的值显示 )
<td style="border-bottom: #dcdcdc solid 1px;" class="checkbox">
                                                            <?
                                                     $arrcheck = array(
                                                        'NorthAmerica'=> 'North America',
                                                        'SouthAmerica'=> 'South America',
                                                        'WesternEurope'=> 'Western Europe',
                                                        'EasternAsia'=> 'Eastern Asia',
                                                        'SoutheastAsia'=> 'Southeast Asia',
                                                        'Middle'=> 'Middle East',
                                                        'Africa'=> 'Africa',
                                                        'Oceania'=> 'Oceania',
                                                        'Worldwide'=>'Worldwide'
                                                     );
                                                 

                                                     $arr=array_keys($arrcheck);
                                                   
 if($reg->marketname){
                                                         $arr=$reg->marketname;
                                                     }
                                                 
 foreach($arrcheck as $key=>$value){
                                                         $checked=in_array($key,$arr)?'checked':'';
                                                         echo "<span class=fleft style='margin-right:50px;'><input type=checkbox name=marcket[] value='".$key."'".$checked.">".$value."</span>";
                                                     }
                                                    ?>                                                        
                                                    </td>

先定义个一个包含所有选项的大数组,然后读取到一个需要选中的小数组,利用第三个数组判断小数组中的值有那些出现在大数组里,然后设为选中,最后遍历数组显示。

implode(',',arr)这个是把数组以一个符号分隔数组每个值并存放成字符串。

explode(',',arr)这个则是把字符串按一个字符分割,存放到数组。

http_build_query($_GET); 当前url?以后的东西

str_replace('+86-','', +86-3016331313);字符替换,这个就是将+86-替换成空格

电话号码正则 0\d{2}-\d{8}|0\d{3}-\d{7};

正则替换匹配字符preg_replace('/-(.*)\./is','.',$str);

'/-(.*)\./is'  这个正则是匹配-开始.结束的任意字符,可以随便换。由于.是特殊字符所有用\转意

一些常用的正则:

Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
Mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^\"\"])*$/,
IdCard : /^\d{15}(\d{2}[A-Za-z0-9])?$/,
Currency : /^\d+(\.\d+)?$/,
Number : /^\d+$/,
Zip : /^[1-9]\d{5}$/,
QQ : /^[1-9]\d{4,8}$/,
Integer : /^[-\+]?\d+$/,
Double : /^[-\+]?\d+(\.\d+)?$/,
English : /^[A-Za-z]+$/,
Chinese : /^[\u0391-\uFFE5]+$/,
Username : /^[a-z]\w{3,}$/i,
UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}\?\\\/\'\"]*)|.{0,5})$|\s/,

原创粉丝点击