为什么80%的码农都做不了架构师?>>>
新年第一篇文章,从一个简单的小把戏开始吧~~
之前社区里有朋友在问,如何在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
最后:如果我的文章有帮到您,请点赞支持一下,谢谢~