Is there any function/stored procedure in PostgreSQL/plpgsql which is same as the javascripts encodeURI?
What does it mean? Javascript have a handy built in function to encode any kind of url:
encodeURI(url) -> returns the encoded url
For example:
encodeURI('http://hu.wikipedia.org/wiki/São_Paulo')
-> returns a String which is "http://hu.wikipedia.org/wiki/S%C3%A3o_Paulo"
I looking for exactly the same.
I don't want to encode each parameters separately. I don't want a function like javascript encodeURIComponent which is not the same. The example above results a different output with
encodeURIComponent('http://hu.wikipedia.org/wiki/São_Paulo')
-> "http%3A%2F%2Fhu.wikipedia.org%2Fwiki%2FS%C3%A3o_Paulo"
It's encode the whole string not just the path part. So this is not what I'm looking for. I need a plpgsql function which results equivalent output to javascript function encodeURI.
Thanks!
Slow and inefficient, consider doing C
version of this function:
CREATE OR REPLACE FUNCTION urlencode(in_str text, OUT _result text)
STRICT IMMUTABLE AS $urlencode$
DECLARE
_i int4;
_temp varchar;
_ascii int4;
BEGIN
_result = '';
FOR _i IN 1 .. length(in_str) LOOP
_temp := substr(in_str, _i, 1);
IF _temp ~ '[0-9a-zA-Z:/@._?#-]+' THEN
_result := _result || _temp;
ELSE
_ascii := ascii(_temp);
IF _ascii > x'07ff'::int4 THEN
RAISE EXCEPTION 'Won''t deal with 3 (or more) byte sequences.';
END IF;
IF _ascii <= x'07f'::int4 THEN
_temp := '%'||to_hex(_ascii);
ELSE
_temp := '%'||to_hex((_ascii & x'03f'::int4)+x'80'::int4);
_ascii := _ascii >> 6;
_temp := '%'||to_hex((_ascii & x'01f'::int4)+x'c0'::int4)
||_temp;
END IF;
_result := _result || upper(_temp);
END IF;
END LOOP;
RETURN ;
END;
$urlencode$ LANGUAGE plpgsql;
Results:
# select urlencode('http://hu.wikipedia.org/wiki/São_Paulo');
-[ RECORD 1 ]------------------------------------------
urlencode | http://hu.wikipedia.org/wiki/S%C3%A3o_Paulo
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With