示例字符串:
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)