將轉義的Unicode字符轉換回PostgreSQL中的實際字符


示例字符串:

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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM