postgresql - ملكية - موقع مديرية المرور العامة الغرامات الرقم الصدامي
تحويل حرف يونيكود هرب إلى الحرف الفعلي في بوستغريزل (1)
هل هناك طريقة يمكنني تحويل السلسلة التالية مرة أخرى إلى القيمة التي يمكن قراءتها بواسطة الإنسان؟ لدي بعض البيانات الخارجية حيث يتم هروب جميع الأحرف غير أسي.
أمثلة السلاسل:
16 StringProvider_111=Telefon\u00ED kontakty
17 StringProvider_116=Odpov\u011Bdn\u00E1 osoba
النتيجة المطلوبة:
16 StringProvider_111=Telefoní kontakty
17 StringProvider_116=Odpovědná osoba
قاعدة البيانات لديها ترميز UTF8 ومقارنة cs_CZ.UTF-8
إحدى الخدع القديمة تستخدم المحلل لهذا الغرض:
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
EXECUTE format('SELECT e''%s''', $1) INTO result;
RETURN result;
END;
$function$
وهو يعمل، وإنما هو حقن سكل الضعيفة - لذلك يجب عليك أن تعقيم النص المدخلات أولا!
هنا هو أقل قابلية للقراءة، ولكن نسخة آمنة - ولكن عليك أن تحدد يدويا شار واحد كرمز الهروب:
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)