본문으로 건너뛰기

문자열 이스케이프

String Escaper

JSON·자바스크립트·SQL·셸·CSV·정규식 규칙에 맞게 문자열을 이스케이프하고 되돌립니다.

문자열 리터럴 안에 붙여넣을 수 있도록 텍스트를 이스케이프하고 다시 되돌립니다. JSON, JavaScript, Python, Java, C#, SQL, 셸 명령, CSV 필드, 정규식까지 대상별로 규칙이 다릅니다. 그 차이가 바로 주입 버그가 사는 자리입니다.

🔒 브라우저 안에서만 처리escapestringjsonshell
규칙
방향

RFC 8259: `\" \\ \/ \b \f \n \r \t`, 나머지는 `\uXXXX`. `\'`도 `\x`도 `\0`도 없습니다.

텍스트

이스케이프된 값

입력

0자

출력

0자

사용 방법

  1. 대상 언어를 고릅니다

    고르는 칸 아래에 그 대상이 실제로 무엇을 이스케이프하는지 적혀 있습니다. JSON은 JavaScript보다 엄격하고, 템플릿 리터럴은 신경 쓸 글자가 둘 더 있으며, 작은따옴표 셸과 큰따옴표 셸은 아예 다른 문제입니다.

  2. 원문을 붙여넣습니다

    줄바꿈, 따옴표, 비ASCII를 모두 처리합니다. 나오는 것은 리터럴의 *안쪽*입니다. 감싸는 따옴표는 직접 붙이세요.

  3. "되돌려도 같음"을 확인합니다

    출력 아래의 항목이 결과를 다시 되돌려 입력과 비교합니다. 아니오가 나오면 이 대상에서는 이스케이프가 손실이 있다는 뜻이고, 붙여넣을 문자열은 원래 문자열이 아닙니다.

자주 묻는 질문

이스케이프하면 SQL이 안전해지나요?

아닙니다. 리터럴을 이스케이프하는 것과 파라미터 바인딩은 다릅니다. 이 도구는 데이터베이스의 인용 모드도, 문자셋도, 그 값이 따옴표가 구분자가 아닌 자리로 가는지도 알 수 없습니다. 바인딩 파라미터를 쓰세요. 이건 쿼리를 읽을 때 쓰는 것이지 운영용 쿼리를 만드는 도구가 아닙니다.

SQL 모드는 왜 백슬래시를 안 쓰나요?

표준 SQL에는 백슬래시 이스케이프가 없기 때문입니다. 따옴표는 두 번 씁니다. 백슬래시 이스케이프는 MySQL의 확장이고, 그게 있다고 가정한 코드에서 주입 사고가 꽤 나왔습니다. MySQL 동작이 필요하다면 그건 의식적으로 택할 일입니다.

`\uXXXX` 대상은 뭘 하나요?

비ASCII 글자를 전부 `\uXXXX` 이스케이프로 바꿉니다. 서로게이트 쌍도 포함합니다. 더 쓸모 있는 건 반대 방향입니다. ASCII만 다루는 파이프라인이 망가뜨린 properties 파일이나 로그를 되돌리면 한글이 돌아옵니다.

작은따옴표 셸이면 어떤 문자열이든 정말 안전한가요?

문자열 자체로는 그렇습니다. POSIX 작은따옴표 안에서는 아무것도 뜻을 갖지 않고 따옴표는 `'\''`로 씁니다. 다만 호출하는 프로그램이 인자를 해석하는 것이나 POSIX가 아닌 셸까지 막아 주지는 않습니다. 인용 규칙이지 샌드박스가 아닙니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.