php 函数规范化输入输出

在PHP网站开发过程中会遇到很多需要转义的地方,下面推荐几个很好的函数,可以很好地增强网站的输入输出规范化问题。

  1. 纯文本输出,适合input

function t($text){
    $text = h($text);
    $text = strip_tags($text);
    return $text;
}

  2. 多行纯文本 适合textarea

function text($text)
{
    return trim(nl2br(str_replace(‘ ‘, ‘ ‘, htmlspecialchars($text))));
}

 

  3. 将html换行变成回车

function br2nl($text)
{
    return trim(preg_replace(‘/<br\\s*\/?‘.‘>/i‘, ‘‘, $text));
}

 

  4. 输出安全的html

function h($text){
    $text = trim($text);
    $text = stripslashes($text);
    //完全过滤注释
    $text = preg_replace(‘/<!--?.*-->/‘,‘‘,$text);
    //完全过滤动态代码
    $text = preg_replace(‘/<\?|\?‘.‘>/‘,‘‘,$text);
    //完全过滤js
    $text = preg_replace(‘/<script?.*\/script>/‘,‘‘,$text);
    $text = str_replace(‘[‘,‘[‘,$text);
    $text = str_replace(‘]‘,‘]‘,$text);
    $text = str_replace(‘|‘,‘|‘,$text);
    //过滤换行符
    $text = preg_replace(‘/\r?\n/‘,‘‘,$text);
    //br
    $text = preg_replace(‘/<br(\s\/)?‘.‘>/i‘,‘[br]‘,$text);
    $text = preg_replace(‘/(\[br\]\s*){10,}/i‘,‘[br]‘,$text);
    //hr img area input
    $text = preg_replace(‘/<(hr|img|input|area|isindex)( [^><\[\]]*)>/i‘,‘[\1\2]‘,$text);
    //过滤多余html
    $text = preg_replace(‘/<\/?(html|head|meta|link|base|body|title|style|script|form|iframe|frame|frameset)[^><]*>/i‘,‘‘,$text);
    //过滤on事件lang js
    while(preg_match(‘/(<[^><]+)( lang|onfinish|onmouse|onexit|onerror|onclick|onkey|onload|onchange|onfocus|onblur)[^><]+/i‘,$text,$mat)){
        $text=str_replace($mat[0],$mat[1],$text);
    }
    while(preg_match(‘/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i‘,$text,$mat)){
        $text=str_replace($mat[0],$mat[1].$mat[3],$text);
    }
    //过滤合法的html标签
    while(preg_match(‘/<([a-z]+)[^><\[\]]*>[^><]*<\/\1>/i‘,$text,$mat)){
        $text=str_replace($mat[0],str_replace(‘>‘,‘]‘,str_replace(‘<‘,‘[‘,$mat[0])),$text);
    }
    //转换引号
    while(preg_match(‘/(\[[^\[\]]*=\s*)(\"|\‘)([^\2=\[\]]+)\2([^\[\]]*\])/i‘,$text,$mat)){
        $text=str_replace($mat[0],$mat[1].‘|‘.$mat[3].‘|‘.$mat[4],$text);
    }
    //过滤错误的单个引号
    while(preg_match(‘/\[[^\[\]]*(\"|\‘)[^\[\]]*\]/i‘,$text,$mat)){
        $text=str_replace($mat[0],str_replace($mat[1],‘‘,$mat[0]),$text);
    }
    //转换其它所有不合法的 < >
    $text = str_replace(‘<‘,‘<‘,$text);
    $text = str_replace(‘>‘,‘>‘,$text);
    $text = str_replace(‘"‘,‘"‘,$text);
    //反转换
    $text = str_replace(‘[‘,‘<‘,$text);
    $text = str_replace(‘]‘,‘>‘,$text);
    $text = str_replace(‘|‘,‘"‘,$text);
    //过滤多余空格
    $text = str_replace(‘ ‘,‘ ‘,$text);
    return $text;
}

 

  5. 过滤脚本代码

function cleanJs($text){
    $text = trim($text);
    $text = stripslashes($text);
    //完全过滤动态代码
    $text = preg_replace(‘/<\?|\?‘.‘>/‘,‘‘,$text);
    //完全过滤js
    $text = preg_replace(‘/<script?.*\/script>/‘,‘‘,$text);
    //过滤多余html
    $text = preg_replace(‘/<\/?(html|head|meta|link|base|body|title|style|script|form|iframe|frame|frameset)[^><]*>/i‘,‘‘,$text);
    //过滤on事件lang js
    while(preg_match(‘/(<[^><]+)(lang|onfinish|onmouse|onexit|onerror|onclick|onkey|onload|onchange|onfocus|onblur)[^><]+/i‘,$text,$mat)){
        $text=str_replace($mat[0],$mat[1],$text);
    }
    while(preg_match(‘/(<[^><]+)(window\.|javascript:|js:|about:|file:|document\.|vbs:|cookie)([^><]*)/i‘,$text,$mat)){
        $text=str_replace($mat[0],$mat[1].$mat[3],$text);
    }
    return $text;
}

 

  1.   6. 在编辑器中显示纯文本
function et($text)
{
    return trim(br2nl(str_replace(‘ ‘, ‘ ‘, $text )));
}

 

  7. 在html编辑器中显示html

function eh($text)
{
    return trim(str_replace(‘"‘,‘"‘, $text));
}

 

  8. 判断时间距离

function friendlyDate($sTime,$type = ‘normal‘,$alt = ‘false‘) {
    //sTime=源时间,cTime=当前时间,dTime=时间差
    $cTime = time();
    $dTime = $cTime - $sTime;
    $dDay = intval(date("Ymd",$cTime)) - intval(date("Ymd",$sTime));
    $dYear = intval(date("Y",$cTime)) - intval(date("Y",$sTime));
    //normal:n秒前,n分钟前,n小时前,日期
    if($type==‘normal‘){
        if( $dTime < 60 )
        {
            echo $dTime."秒前";
        }
        elseif( $dTime < 3600 )
        {
            echo intval($dTime/60)."分钟前";
        }
        elseif( $dTime >= 3600 && $dDay == 0 )
        {
            echo intval($dTime/3600)."小时前";
        }

        elseif($dYear==0)
        {
            echo date("m-d ,H:i",$sTime);
        }
        else
        {
            echo date("Y-m-d ,H:i",$sTime);
        }
        //full: Y-m-d , H:i:s
    }
    elseif($type==‘full‘)
    {
        echo date("Y-m-d , H:i:s",$sTime);
    }
}

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。