Greenplum小把戏 – 简单函数实现URL解码(URL Decode)- 同样适用于Deepgreen和PostgreSQL…

释放双眼,带上耳机,听听看~!

为什么80%的码农都做不了架构师?>>>  Greenplum小把戏 - 简单函数实现URL解码(URL Decode)- 同样适用于Deepgreen和PostgreSQL...

新年第一篇文章,从一个简单的小把戏开始吧~~


之前社区里有朋友在问,如何在Greenplum里面实现URL解码?

首先肯定很多朋友不知道为什么要使用URL编码和解码,简单来说,使用这种技术就是为了防止在URL传递过程中有乱码出现,我们平时使用的1、2、3、4这种通用字符当然不会出现乱码问题,但是在国内尤其是汉字来说,如果处理不当,极有可能出现乱码。采用特殊字符替换的方式,将原有的字符替换为标准的字符,然后进行URL传递,这种方式成为URL编码(URL Encode);反之,对已经做了URL编码的字符,进行解码,叫做URL解码(URL Decode)。

在Greenplum及PostgreSQL体系中,并没有先天带有URL Decode处理函数,但是我们可以根据解码处理逻辑,创建一个函数来处理该过程,话不多说,直接上例子:

函数整体逻辑如下:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1CREATE OR REPLACE FUNCTION url_decode(input text) RETURNS text
2LANGUAGE plpgsql IMMUTABLE STRICT AS $$
3DECLARE
4 bin bytea = '';
5 byte text;
6BEGIN
7 FOR byte IN (select (regexp_matches(input, '(%..|.)', 'g'))[1]) LOOP
8   IF length(byte) = 3 THEN
9     bin = bin || decode(substring(byte, 2, 2), 'hex');
10   ELSE
11     bin = bin || byte::bytea;
12   END IF;
13 END LOOP;
14 RETURN convert_from(bin, 'utf8');
15END
16$$;
17

创建后执行方法及结果如下:


1
2
3
4
5
6
1postgres=# select url_decode('2019%e5%b9%b41%e6%9c%881%e6%97%a5%ef%bc%8c%e7%a5%9d%e5%a4%a7%e5%ae%b6%e5%9c%a8%e6%96%b0%e7%9a%84%e4%b8%80%e5%b9%b4%e9%87%8c%e5%b7%a5%e4%bd%9c%e9%a1%ba%e5%88%a9%e3%80%81%e5%ae%b6%e5%ba%ad%e5%b9%b8%e7%a6%8f%ef%bc%81');
2                      url_decode
3------------------------------------------------------
4 2019年1月1日,祝大家在新的一年里工作顺利、家庭幸福!
5(1 row)
6

 

最后:如果我的文章有帮到您,请点赞支持一下,谢谢~

转载于:https://my.oschina.net/javacy/blog/2995776

给TA打赏
共{{data.count}}人
人已打赏
安全运维

基于spring boot和mongodb打造一套完整的权限架构(二)【MAVEN依赖以及相应配置】

2021-12-11 11:36:11

安全运维

Ubuntu上NFS的安装配置

2021-12-19 17:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索