본문 바로가기

C#/예제 코드

c# 자바스크립트 문자열 encode & decode (escape)

사전지식

C#코드로 웹페이지(html)에 자바스크립트 문자열을 박을 때에는 encoding을 해줘야 한다. 

쌍따옴표나 홑따옴표 또는 탈출문자열이 섞여 있을 때 문제가 되기 떄문이다. (웹브라우저가 파싱을 못해요)


실습

    public static object Escape(string str)
    {
        return HttpUtility.JavaScriptStringEncode(str);
    }
   
    public static string UnEscape(string str)
    {
        StringBuilder sb = new(str.Length);
        for (int i = 0; i < str.Length; i++)
        {
            if (str[i] == '\\' && i + 1 < str.Length)
            {
                char c = str[++i];
                switch (c)
                {
                    case '\\':
                    case '"':
                        sb.Append(c);
                        break;
                    case 'b':
                        sb.Append('\b');
                        break;
                    case 't':
                        sb.Append('\t');
                        break;
                    case 'n':
                        sb.Append('\t');
                        break;
                    case 'f':
                        sb.Append('\f');
                        break;
                    case 'r':
                        sb.Append('\r');
                        break;
                    default:
                        if (c == 'u' && str.Length > i + 4)
                        {
                            ++i;
                            int hex = Convert.ToInt32(str[i..(i+4)] , 16);
                            sb.Append((char)hex);
                            i+=3;
                            break;
                        }
                        sb.Append(c);
                        break;
                }
            }
            else sb.Append(str[i]);
        }
        return sb.ToString();
    }

참고

 

HttpUtility 에 decode 부문은 없는거 같아서 직접 만듬 (내가 못찾았을 수도?)