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处理函数,但是我们可以根据解码处理逻辑,创建一个函数来处理该过程,话不多说,直接上例子:

函数整体逻辑如下:

CREATE OR REPLACE FUNCTION url_decode(input text) RETURNS text
LANGUAGE plpgsql IMMUTABLE STRICT AS $$
DECLARE
 bin bytea = '';
 byte text;
BEGIN
 FOR byte IN (select (regexp_matches(input, '(%..|.)', 'g'))[1]) LOOP
   IF length(byte) = 3 THEN
     bin = bin || decode(substring(byte, 2, 2), 'hex');
   ELSE
     bin = bin || byte::bytea;
   END IF;
 END LOOP;
 RETURN convert_from(bin, 'utf8');
END
$$;

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

postgres=# 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');
                      url_decode
------------------------------------------------------
 2019年1月1日,祝大家在新的一年里工作顺利、家庭幸福!
(1 row)

 

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值