php 字符串 base64编码判断

今天在写一个业务的时候..利用foreach来获取post过来的大量数据。此时发现有些数据是base64编码过的。
这时就要通过判断来进行解码,然后在网上找了一些方法。如下:
$str = "ssssffdfds";
if ($str == base64_encode(base64_decode($str))) {
echo 'yes';
}else{
echo 'no';
}

以上只能判断百分之60左右的base64编码后的字符串
如果遇到字符串长度比较短或者纯字母以及纯数字的话.那么这个判断就歇菜了。
于是就问了一些人.在没人鸟我情况下就想到了这个判断是根据base64解码后再进行编码来判断字符串是否一致。
接着我发现.长度为1的非base64编码字符串在base64解码后的内容是空,长度为2以上非base64编码的字符串解码后是显示乱码,此时灵感一来。就根据空、乱码来判断是否base64编码。
以下是根据字符串是否utf8编码来判断的:
//判断否为UTF-8编码
function is_utf8($str){
$len = strlen($str);
for($i = 0; $i < $len; $i++){ $c = ord($str[$i]); if($c > 128){
if(($c > 247)){
return false;
}elseif($c > 239){
$bytes = 4;
}elseif($c > 223){
$bytes = 3;
}elseif ($c > 191){
$bytes = 2;
}else{
return false;
}
if(($i + $bytes) > $len){
return false;
}
while($bytes > 1){
$i++;
$b = ord($str[$i]);
if($b < 128 || $b > 191){
return false;
}
$bytes--;
}
}
}
return true;
}
//判断是否base64加密
function is_base64($str){
//这里多了个纯字母和纯数字的正则判断
if(@preg_match('/^[0-9]*$/',$str) || @preg_match('/^[a-zA-Z]*$/',$str)){
return false;
}elseif(is_utf8(base64_decode($str)) && base64_decode($str) != ''){
return true;
}
return false;
}

以上代码可以判断百分之99字符串是否base64编码,前提字符串编码是在UTF8下。
is_base64(‘1’) //false
is_base64(1)//false
is_base64(base64_encode(‘测试下’))//true
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值