base64学习使用笔记

第一部分 概念&原理

一、base64是什么
用64个可打印字符来表示二进制数据的方法。【编码后的字符长度不是32位或64位,而是4的倍数,今天还想当然的以为是32位
Base64【维基百科中文】

二、原理
base64【廖雪峰的官方网站-有细节说明】

三、小工具
1、base64在线编码解码
https://base64.us/

2、在线正则表达式测试
https://tool.oschina.net/regex/

第二部分 实践

一、Web应用中使用base64编码参数值并进行正则校验
1、参数特点
API请求参数tabOrder表示多个tab排序,例如:0,3,2,6,1,5,4,7,8,9 既[tabOrder=0,3,2,6,1,5,4,7,8,9],显然直接这么传递不合适,需要对值进行编码

比如:http://x.x.x.x:8220/search/albumsdetail?tn=albumsdetail&word=%E7%BE%8E%E5%A5%B3&album_tab=%E4%BA%BA%E7%89%A9&album_id=45&rn=30&fr=searchresult&dyTabStr=MCwzLDIsNiwxLDUsNCw3LDgsOQ%3D%3D

2、使用base64编码

$dyTabStr = '0,3,2,6,1,5,4,7,8,9';
$val = base64_encode($dyTabStr);
var_dump($val); // string(28) "MCwzLDIsNiwxLDUsNCw3LDgsOQ=="

3、对参数进行正则校验
校验base64正则: ^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$
参考:如何检查字符串是否为Base64编码

$res = preg_match('#^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$#', 'MCwzLDIsNiwxLDUsNCw3LDgsOQ==');
var_dump($res); // int(1)

4、问题
使用PHP preg_match方法进行正则校验提示PHP Warning: preg_match(): Unknown modifier ‘]’

$res = preg_match('/^([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?$/', 'MCwzLDIsNiwxLDUsNCw3LDgsOQ==');

原因是正则中带有/,不能使用/作为分隔符,可以使用#

发表评论

电子邮件地址不会被公开。 必填项已用*标注