使用PHP自带的filter_val过滤数据

使用PHP自带的filter_val过滤数据

作者:LAMP小白  点击:2705  发布日期:2012-12-02 21:32:00  返回列表
写了太多的传参为空和类型转换,今天下定决心吧他们写成AOP,在实际敲码时发现使用正则进行判断,第一麻烦第二效率不高,
于是使用PHP自带的验证来实现,毕竟C比PHP快了不少,也不用我自己去维护规则

if( empty($name) || empty($mail) || empty($psw) || empty($pswre) || $psw != $pswre)
                _err::show('请将填写完整', '有一个或多个选项为空或两次输入的密码不一致~');
            if(userAop::check_name($name))
                _err::show('昵称已被占用', '这个昵称已被占用了,换一个吧~');
            $data = array(
                'name'    =mio_gt; $_POST['name'],
                'psw'     =mio_gt; sha1($_POST['psw']),
                'mail'    =mio_gt; $_POST['mail'],
                'avatar'  =mio_gt; 'null',
                'gender'  =mio_gt; 'G',
                'add_time'=mio_gt; date('Y-m-d H:i:s')
            );
            if( _model('user')-mio_gt;IN($data) )
            {
                _header::location();
            }
            else
            {
                _err::show('注册失败', '对不起注册失败了~');
            }

这种玩意写恶心了吧~哈哈 虽然有JS 但PHP也需要验证一次

static public function post( $param )
{
    $arr = array();
    foreach($param as $k =mio_gt; $v)
    {
        $temp = explode( ' ', $v);
        if( empty($temp[0]) || empty($temp[1]) )
        {
            _err::show('filter设置错误', '请检查filter数组格式' );
        }
        $arr[$temp[1]] = self::filter($temp[0], $_POST[$k]);
        if( empty($arr[$temp[1]]) )
        {
            _err::show( '数据错误', '一个或多个必要参数为空' );
        }
    }
    return $arr;
}


于是需要一个AOP来规范和统一数据验证

case 'MAIL':
                    return filter_var($val, FILTER_VALIDATE_EMAIL);


这样返回的数组就是一个过滤完整的数组,再不用傻乎乎的一个一个去写接收了

关键点:







----------------华丽的分割线 PHP过滤参数 只翻译的功能 过滤规则自己看吧
PHP 5.2以上能使用

验证功能


验证有没有值

FILTER_VALIDATE_BOOLEAN


mio_quot;booleanmio_quot;



FILTER_NULL_ON_FAILURE



Returns TRUE for mio_quot;1mio_quot;, mio_quot;truemio_quot;, mio_quot;onmio_quot; and mio_quot;yesmio_quot;. Returns FALSE otherwise.


If FILTER_NULL_ON_FAILURE is set, FALSE is returned only for mio_quot;0mio_quot;, mio_quot;falsemio_quot;, mio_quot;offmio_quot;, mio_quot;nomio_quot;, and mio_quot;mio_quot;, and NULL is returned for all non-boolean values.




验证是否为邮箱

FILTER_VALIDATE_EMAIL


mio_quot;validate_emailmio_quot;



Validates value as e-mail.




FILTER_VALIDATE_FLOAT


mio_quot;floatmio_quot;


decimal


FILTER_FLAG_ALLOW_THOUSAND


Validates value as float.



验证是否是整型

FILTER_VALIDATE_INT


mio_quot;intmio_quot;


min_range, max_range


FILTER_FLAG_ALLOW_OCTAL, FILTER_FLAG_ALLOW_HEX


Validates value as integer, optionally from the specified range.



验证是否是IP

FILTER_VALIDATE_IP


mio_quot;validate_ipmio_quot;



FILTER_FLAG_IPV4, FILTER_FLAG_IPV6, FILTER_FLAG_NO_PRIV_RANGE, FILTER_FLAG_NO_RES_RANGE


Validates value as IP address, optionally only IPv4 or IPv6 or not from private or reserved ranges.



验证是否是正则

FILTER_VALIDATE_REGEXP


mio_quot;validate_regexpmio_quot;


regexp


验证是否是URL

Validates value against regexp, a Perl-compatible regular expression.




FILTER_VALIDATE_URL


mio_quot;validate_urlmio_quot;



FILTER_FLAG_PATH_REQUIRED, FILTER_FLAG_QUERY_REQUIRED


Validates value as URL (according to » http://www.faqs.org/rfcs/rfc2396), optionally with required components. Note that the function will only find ASCII URLs to be valid; internationalized domain names (containing non-ASCII characters)


will fail.


过滤功能



邮箱过滤

FILTER_SANITIZE_EMAIL


mio_quot;emailmio_quot;



Remove all characters except letters, digits and !#$%mio_mio_#39;*+-/=?^_`{|}~@.[].



过滤URL会对特殊字符进行编码

FILTER_SANITIZE_ENCODED


mio_quot;encodedmio_quot;



FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH


URL-encode string, optionally strip or encode special characters.



添加转义

FILTER_SANITIZE_MAGIC_QUOTES


mio_quot;magic_quotesmio_quot;


Apply addslashes().


浮点过滤


FILTER_SANITIZE_NUMBER_FLOAT


mio_quot;number_floatmio_quot;



FILTER_FLAG_ALLOW_FRACTION, FILTER_FLAG_ALLOW_THOUSAND, FILTER_FLAG_ALLOW_SCIENTIFIC


Remove all characters except digits, +- and optionally .,eE.


整型过滤


FILTER_SANITIZE_NUMBER_INT


mio_quot;number_intmio_quot;


Remove all characters except digits, plus and minus sign.



字符串过滤

FILTER_SANITIZE_SPECIAL_CHARS


mio_quot;special_charsmio_quot;



FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_HIGH


HTML-escape mio_#39;mio_quot;mio_lt;mio_gt;mio_ and characters with ASCII value less than 32, optionally strip or encode other special characters.



完整的字符串过滤(等于调用htmlspecialchars进行HTML实体化)

FILTER_SANITIZE_FULL_SPECIAL_CHARS


mio_quot;full_special_charsmio_quot;



FILTER_FLAG_NO_ENCODE_QUOTES,


Equivalent to calling htmlspecialchars() with ENT_QUOTES set. Encoding quotes can be disabled by setting FILTER_FLAG_NO_ENCODE_QUOTES. Like htmlspecialchars(), this filter is aware of the default_charset and if a sequence of bytes is


detected that makes up an invalid character in the current character set then the entire string is rejected resulting in a 0-length string.


只过滤标签


FILTER_SANITIZE_STRING


mio_quot;stringmio_quot;



FILTER_FLAG_NO_ENCODE_QUOTES, FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP


Strip tags, optionally strip or encode special characters.



只过滤标签的别名 - -

FILTER_SANITIZE_STRIPPED


mio_quot;strippedmio_quot;




Alias of mio_quot;stringmio_quot; filter.



过滤URL

FILTER_SANITIZE_URL


mio_quot;urlmio_quot;




Remove all characters except letters, digits and $-_.+!*mio_#39;(),{}|^~[]`mio_lt;mio_gt;#%mio_quot;;/?:@mio_=.



什么都不做,只进行编码

FILTER_UNSAFE_RAW


mio_quot;unsafe_rawmio_quot;



FILTER_FLAG_STRIP_LOW, FILTER_FLAG_STRIP_HIGH, FILTER_FLAG_ENCODE_LOW, FILTER_FLAG_ENCODE_HIGH, FILTER_FLAG_ENCODE_AMP


Do nothing, optionally strip or encode special characters.




上一篇:解决图片加载失效的问题 下一篇:快递查询API
0