Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations IamaSherpa on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Escape Latin Characters

Status
Not open for further replies.

userMikeD

Programmer
Nov 5, 2008
28
US
I need to escape latin characters in an xml doc. Example: "é" is escaped to "é". I thought I could use the ASCII function, but SELECT ASCII('é') FROM DUAL in Oracle gives me 50089.

I coded this as a quick fix, but I'm sure there's a better way.

Code:
      FUNCTION escape_latin(p_str IN VARCHAR2) RETURN VARCHAR2 IS
         v_str VARCHAR2(3000) := p_str;
      BEGIN
         v_str := REPLACE(v_str, 'À', 'À');
         v_str := REPLACE(v_str, 'Á', 'Á');
         v_str := REPLACE(v_str, 'Â', 'Â');
         v_str := REPLACE(v_str, 'Ã', 'Ã');
         v_str := REPLACE(v_str, 'Ä', 'Ä');
         v_str := REPLACE(v_str, 'Å', 'Å');
         v_str := REPLACE(v_str, 'Æ', 'Æ');
         v_str := REPLACE(v_str, 'Ç', 'Ç');
         v_str := REPLACE(v_str, 'È', 'È');
         v_str := REPLACE(v_str, 'É', 'É');
         v_str := REPLACE(v_str, 'Ê', 'Ê');
         v_str := REPLACE(v_str, 'Ë', 'Ë');
         v_str := REPLACE(v_str, 'Ì', 'Ì');
         v_str := REPLACE(v_str, 'Í', 'Í');
         v_str := REPLACE(v_str, 'Î', 'Î');
         v_str := REPLACE(v_str, 'Ï', 'Ï');
         v_str := REPLACE(v_str, 'Ð', 'Ð');
         v_str := REPLACE(v_str, 'Ñ', 'Ñ');
         v_str := REPLACE(v_str, 'Ò', 'Ò');
         v_str := REPLACE(v_str, 'Ó', 'Ó');
         v_str := REPLACE(v_str, 'Ô', 'Ô');
         v_str := REPLACE(v_str, 'Õ', 'Õ');
         v_str := REPLACE(v_str, 'Ö', 'Ö');
         v_str := REPLACE(v_str, '×', '×');
         v_str := REPLACE(v_str, 'Ø', 'Ø');
         v_str := REPLACE(v_str, 'Ù', 'Ù');
         v_str := REPLACE(v_str, 'Ú', 'Ú');
         v_str := REPLACE(v_str, 'Û', 'Û');
         v_str := REPLACE(v_str, 'Ü', 'Ü');
         v_str := REPLACE(v_str, 'Ý', 'Ý');
         v_str := REPLACE(v_str, 'Þ', 'Þ');
         v_str := REPLACE(v_str, 'ß', 'ß');
         v_str := REPLACE(v_str, 'à', 'à');
         v_str := REPLACE(v_str, 'á', 'á');
         v_str := REPLACE(v_str, 'â', 'â');
         v_str := REPLACE(v_str, 'ã', 'ã');
         v_str := REPLACE(v_str, 'ä', 'ä');
         v_str := REPLACE(v_str, 'å', 'å');
         v_str := REPLACE(v_str, 'æ', 'æ');
         v_str := REPLACE(v_str, 'ç', 'ç');
         v_str := REPLACE(v_str, 'è', 'è');
         v_str := REPLACE(v_str, 'é', 'é');
         v_str := REPLACE(v_str, 'ê', 'ê');
         v_str := REPLACE(v_str, 'ë', 'ë');
         v_str := REPLACE(v_str, 'ì', 'ì');
         v_str := REPLACE(v_str, 'í', 'í');
         v_str := REPLACE(v_str, 'î', 'î');
         v_str := REPLACE(v_str, 'ï', 'ï');
         v_str := REPLACE(v_str, 'ð', 'ð');
         v_str := REPLACE(v_str, 'ñ', 'ñ');
         v_str := REPLACE(v_str, 'ò', 'ò');
         v_str := REPLACE(v_str, 'ó', 'ó');
         v_str := REPLACE(v_str, 'ô', 'ô');
         v_str := REPLACE(v_str, 'õ', 'õ');
         v_str := REPLACE(v_str, 'ö', 'ö');
         v_str := REPLACE(v_str, '÷', '÷');
         v_str := REPLACE(v_str, 'ø', 'ø');
         v_str := REPLACE(v_str, 'ù', 'ù');
         v_str := REPLACE(v_str, 'ú', 'ú');
         v_str := REPLACE(v_str, 'û', 'û');
         v_str := REPLACE(v_str, 'ü', 'ü');
         v_str := REPLACE(v_str, 'ý', 'ý');
         v_str := REPLACE(v_str, 'þ', 'þ');
         v_str := REPLACE(v_str, 'ÿ', 'ÿ');

         RETURN v_str;
      
      END escape_latin;

Is there a built in function I can use to make this cleaner and shorter?

Thanks,
Mike
 
Found a cleaner way with this:
Code:
FUNCTION escape_latin(p_str IN VARCHAR2) RETURN VARCHAR2 IS
     v_str  VARCHAR2(10000);
 BEGIN
     SELECT REGEXP_REPLACE(ASCIISTR(p_str), '\\(.{4})', '&#x\1;')
       INTO v_str
       FROM dual;
     RETURN v_str;
END escape_latin;
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top