Openresty资料之数据编码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sky6even/article/details/90644329

OpenResty目前内建支持的有Base64和JSON两种格式,并通过opm安装扩展库支持MessagePack。

◆ Base64:

Base64格式使用64个字符,可以把任意数据转换为ASCII码可见字符串,应用得非常普遍。OpenResty使用ngx.encode_base64和ngx.decode_base64这两个函数实现了标准的Base64编码和解码:

local str = "1234" 
local enc = ngx.encode_base64(str)    -- 编码为“ MTizNA==”
local dec= ngx.decode_base64(enc)     -- 解码还原

Base64编码有一个“padding”特性,编码后长度不是4 的倍数时会用“=”填补。向ngx.encode_base64传递第二个参数nopadding可以禁止填充。

ngx.encode_base64(str, true)    -- 编码结果会是"MTizNA"

标准的Base64编码使用了字符“+”和“/”,不适合用在HTTP协议的URL里,因为“ + ”和“/”会被转换成“%2F ” “ %2B ”导致编码损坏,所以Base64编码还有一种改进形式,它用“-”和“_”替代了“+”和“/”,也不使用“=”填补,可以安全地用在URL 里。

OpenResty在库ngx.base64里提供两个函数: encode_base64url和decode_base64-url支持Base64URL 编码

local b64 = require "ngx.base64"  -- 必须手工加载base64库

local str = "=>?@"
local enc_std = ngx.encode_base64(str)
local enc_url = b64.encode_base64url(str)
local dec = b64.decode_base64url(enc_url)

ngx.say(enc_std)    -- 输出“PT4/QA==”,有“=”填补
ngx.say(enc_url)    -- 输出“ PT4_QA ”,注意使用了"_"

猜你喜欢

转载自blog.csdn.net/sky6even/article/details/90644329