示例字符串:
16 StringProvider_111=Telefon\u00ED kontakty 17 StringProvider_116=Odpov\u011Bdn\u00E1 osoba
要求结果:
16 StringProvider_111=Telefoní kontakty 17 StringProvider_116=Odpovědná osoba
使用解析器来达到这个目的:
postgres=# select e'Telefon\u00ED kontakty'; ?column? ------------------- Telefoní kontakty (1 row) CREATE OR REPLACE FUNCTION public.unescape(text) RETURNS text LANGUAGE plpgsql AS $function$ DECLARE result text; BEGIN --9.x版本 EXECUTE format('SELECT e''%s''', $1) INTO result; --8.x版本 EXECUTE replace( 'SELECT E''@@''','@@',$1) INTO result; RETURN result; END; $function$
它有效,但是SQL注入很容易受到攻击 – 所以你应该首先清理输入文本!
这里的可读性较差,但安全版本 – 但您必须手动指定一个char作为转义符号:
CREATE OR REPLACE FUNCTION public.unescape(text, text) RETURNS text LANGUAGE plpgsql AS $function$ DECLARE result text; BEGIN EXECUTE format('SELECT U&%s UESCAPE %s', quote_literal(replace($1, '\u','^')), quote_literal($2)) INTO result; RETURN result; END; $function$ postgres=# select unescape('Odpov\u011Bdn\u00E1 osoba','^'); unescape ----------------- Odpovědná osoba (1 row)