写了上一篇文章之后,心血来潮想写个页面,做个便民工具什么的。就算声明不会存储他人密钥,可是万一别人还是不放心呢?赖上我怎么办?授人以鱼不如授人以渔嘛,本站的核心就是这个啊。所以~~~
截取函数
首先,要把这个东西整理出来,我们要让这个支付宝公钥变成四个部分,也就是三行64,一行24。第一个想到的方法是跑循环,可是我觉得没必要吧,一来我没想到什么函数适合,二来我其实心底里有个很熟悉的函数,那就是“mb_substr”这个啦。以前改过不少模板的时候,经常会用这个函数的。
官方文档:http://php.net/manual/zh/function.mb-substr.php
先来介绍下,mb_substr这个函数有四个参数:
参数 | 作用 |
str | 必填,要截取的字符串变量 |
start | 必填,开始的位置,指针第一个是0 |
length | 可选,截取的数量,从开始位置计算,如果没这个参数则取到结尾 |
encoding | 可选,编码格式,如果没指定则使用内部字符编码 |
用法示例
首先把密钥赋值给一个变量,然后用这个函数来截取字符串,再赋值变量,然后输出。
代码如下:
- //把密钥赋值给 $key
- $key = 'MIGfMA0G*******DAQAB';
- //用mb_substr处理
- //把$key从第一个开始,也就是指针0,截取64个,编码UTF8
- $key1 = mb_substr( $key, 0, 64, 'utf-8');
- //输出变量的值
- echo $key1;
注意一点是,指针从0开始,所以0就是第一个,那么,64就是第65个。所以第二行的话应该这么写:
- //错误写法
- $key2 = mb_substr( $key, 65, 64, 'utf-8');
- //正确写法
- $key2 = mb_substr( $key, 64, 64, 'utf-8');
由于密钥都是字母数字和特定符号,不会出现中文或特殊符号,所以其实编码是可以不声明的,不过为了以防万一可以全局声明下,这样就不用写太多无用的定义了。代码有时候需要简洁点好。最后一个只剩下24,所以也可以不用声明了。
- //声明编码
- header("Content-type: text/html; charset=utf-8");
- //截取最后一段
- $key4 = mb_substr($key, 192);
- //或者
- $key4 = mb_substr($key, 192, 24);
完整代码
下面是完整代码,复制代码到记事本,替换$key里面的值,改为你的密钥,然后重命名为key.php。把文件放在PHP主机环境下运行打开即可得到转换后的内容,然后直接复制内容做成支付宝公钥。
- <?php
- header("Content-type: text/html; charset=utf-8");
- //替换括号里的内容。
- $key = 'MIGfMA0G*******DAQAB';
- $key1 = mb_substr($key, 0, 64);
- $key2 = mb_substr($key, 64, 64);
- $key3 = mb_substr($key, 128, 64);
- $key4 = mb_substr($key, 192);
- echo "-----BEGIN PUBLIC KEY-----<br>";
- echo $key1."<br>";
- echo $key2."<br>";
- echo $key3."<br>";
- echo $key4."<br>";
- echo "-----END PUBLIC KEY-----<br>";
- ?>
扩展阅读
1,由于证书格式规定,所以加了第12行和17行;
2,PHP中,多个变量或字符串之间,用“.”连接起来;
3:如果第三个参数没设定,第四个请勿设定,否则报错;
4:这个函数如果未开启,请在php.ini里修改开启。
开启方法,搜索“php_mbstring”,把;extension前面的分号去掉。然后重启环境。
5:如果想验证长度,可以利用另一个函数“strlen”。
- echo strlen(trim($key1)).'--';
- echo strlen(trim($key2)).'--';
- echo strlen(trim($key3)).'--';
- echo strlen(trim($key4));
实际如出如图
您可以选择一种方式赞助本站
支付宝扫一扫赞助
微信钱包扫描赞助