제로 폭 문자를 안전하게 검사하고 제거하기

텍스트브라우저에서 실행(업로드 없음)

디코딩된 텍스트에서 이름이 정해진 제로 폭 Unicode 제어 문자 6종을 찾고, 코드 포인트와 줄 위치를 검토한 뒤 승인한 종류만 제거합니다. 일반 정리는 U+200B와 U+FEFF만 제거하고 문자 결합, 단어 줄바꿈, 이모지 시퀀스, 몽골어 구분자는 보호하며 결과는 브라우저 안에서 처리됩니다.

다음에 할 작업

관련 작업 흐름을 이어가거나 이 작업 다음에 자주 사용하는 도구를 열어보세요.

이 도구 사용 방법

손대지 않은 원문을 보관한 뒤 UTF-8 기준 최대 1 MiB의 디코딩된 텍스트를 붙여넣거나 업로드합니다.

수정 없이 위치만 확인하려면 검사만, U+200B와 U+FEFF를 정리하려면 일반 정리를 선택합니다.

확인된 한 종류만 제거할 때는 종류 선택을 사용하고, 문자 결합과 줄바꿈 위험을 검토한 뒤에만 전체 지원 문자를 선택합니다.

검사를 실행하고 탐지, 제거, 보존, 영향받은 줄, 코드 포인트별 개수를 비교합니다.

특히 ZWJ, ZWNJ, WORD JOINER, MVS와 맨 앞 U+FEFF의 첫 위치 및 가시화된 문맥을 원문과 대조합니다.

정확한 결과를 복사하거나 다운로드한 뒤 원문을 대체하기 전에 식별자, 검색 키, 링크, 코드, 다국어 텍스트를 실제 목적지에서 시험합니다.

이 도구를 써야 할 때

식별자와 검색 불일치 검토

화면에는 같아 보이지만 비교 결과가 다른 이메일 주소, 사용자 이름, 데이터베이스 키, 검색어에서 숨은 구분자를 찾습니다.

코드와 구조화 데이터 정리

붙여넣은 소스, CSV 필드, 환경 변수 값, 식별자를 파서나 검증기에 넣기 전에 지원 제어 문자를 검사합니다.

다국어와 이모지 검사

ZWJ와 ZWNJ를 기본으로 보존하면서 이모지 시퀀스 또는 아랍어, 페르시아어, 인도계 텍스트에 의도된 결합 문자가 있는지 확인합니다.

줄바꿈과 복사·붙여넣기 진단

복사한 텍스트가 눈에 보이는 공백과 다르게 줄바꿈되거나 검색될 때 U+200B, WORD JOINER, 레거시 U+FEFF의 위치를 찾습니다.

증거를 남기는 난독화 분류

숨은 제어 문자 자체를 악의의 증거로 단정하지 않으면서 의심스러운 문자열의 코드 포인트 위치를 사람 검토용으로 기록합니다.

흔한 실수

탐지된 문자를 처음부터 모두 제거하기

ZWJ와 ZWNJ는 이모지를 구성하거나 필기체 및 인도계 문자 결합을 제어할 수 있고, WORD JOINER와 ZERO WIDTH SPACE는 줄바꿈에 영향을 줍니다. 먼저 검사만 또는 일반 정리를 사용하고 원문과 비교한 뒤에만 전체 지원 문자를 선택하세요.

보이지 않는 모든 Unicode 문자를 다룬다고 생각하기

이 도구는 의도적으로 코드 포인트 6종만 인식합니다. 소프트 하이픈, 양방향 제어 문자, 변형 선택자, 결합 문자, 일반 공백과 그 밖의 모든 기본 무시 문자는 계약 밖이므로 별도 검토가 필요합니다.

디코딩된 U+FEFF를 완전한 BOM 증거로 보기

브라우저에서 이미 디코딩된 문자열 맨 앞의 U+FEFF는 BOM 잔여 문자일 수도 있고 본문 문자일 수도 있습니다. 원래 UTF-8, UTF-16, UTF-32 서명 바이트는 여기서 복구할 수 없으므로 인코딩 증거가 중요하면 바이트 기반 파일 절차를 사용하세요.

제거와 무관한 정규화를 한 번에 수행하기

Unicode 정규화, 줄바꿈 변환, 앞뒤 공백 제거, 편집기 자동 서식은 별도 변화를 만들 수 있습니다. 먼저 제로 폭 문자 결과를 비교한 뒤 각 작업을 따로 실행해야 변경 원인을 구분할 수 있습니다.

탐지 결과를 보안 판정으로 사용하기

숨은 제어 문자는 불일치나 난독화 원인을 설명할 수 있지만 존재만으로 악의를 증명하지 않으며, 없다고 콘텐츠가 안전해지는 것도 아닙니다. 식별자, 링크, 소스 코드는 목적지 시스템과 해당 보안 통제로 다시 검증하세요.

예시

이모지를 분리하지 않고 일반 숨은 구분자 정리

일반 정리는 U+200B와 U+FEFF를 제거하면서 개발자 이모지 시퀀스를 결합하는 ZWJ는 보존합니다. CRLF 구분자도 그대로 유지됩니다.

입력
account​@example.com
Emoji: 👩‍💻
legacymark
출력
account@example.com
Emoji: 👩‍💻
legacymark

검토 후 지원 문자 6종 모두 제거

전체 지원 문자는 의도적으로 파괴적인 정책입니다. 더 넓은 정책을 선택한 뒤에만 ZWSP, ZWNJ, ZWJ, WORD JOINER, U+FEFF, MVS를 모두 제거합니다.

입력
a​b‌c‍d⁠ef᠎g
출력
abcdefg

범위가 정해진 Unicode 검사와 선택 제거 계약

탐지기는 U+200B, U+200C, U+200D, U+2060, U+FEFF, U+180E로 고정된 6개 코드 포인트 계약을 사용합니다. 넓은 보이지 않는 문자 정규식을 쓰지 않으므로 소프트 하이픈, 양방향 제어, 변형 선택자, 결합 문자와 다른 기본 무시 문자를 조용히 삭제하지 않습니다.

검사만은 선택 문자가 없습니다. 일반 정리는 U+200B와 U+FEFF를 선택하고 전체 지원 문자는 6종을 모두 선택합니다. 종류 선택은 체크한 집합만 정의 순서대로 적용하며 중복 선택이 중복 제거를 만들 수 없습니다.

ZWSP는 줄바꿈 기회를 제공하고 WORD JOINER와 레거시 U+FEFF는 줄바꿈을 막을 수 있습니다. ZWNJ와 ZWJ는 복잡한 문자 체계의 결합에 영향을 주며 ZWJ는 이모지 시퀀스에도 참여하고 MVS는 몽골어 전용입니다. 따라서 광범위한 삭제는 의미를 바꿀 수 있습니다.

위치는 내부적으로 0부터 시작하는 코드 포인트 및 UTF-16 오프셋을 사용하고 화면에는 1부터 시작하는 코드 포인트 위치, 줄, 열로 표시합니다. CRLF는 한 번의 줄 경계로 세고 보조 평면 문자는 코드 포인트 하나로 세며, 가시 문맥에서는 탭, 줄바꿈, 인접 지원 문자를 이스케이프합니다.

빈 입력, 짝이 맞지 않는 UTF-16 서로게이트, 1,048,576 UTF-8 바이트 초과 입력은 잘라내지 않고 거부합니다. 전체 발생 건수는 모두 합산하되 엔진은 상세 기록을 최대 200건 보관하고 화면은 페이지 반응성을 위해 처음 25건을 표시합니다.

출력은 선택한 코드 포인트만 생략해 만듭니다. 앞뒤 공백 제거, 정규화, 줄바꿈 변경, 인코딩 바이트 재해석, 서버 통신을 수행하지 않습니다. U+FEFF는 디코딩된 텍스트에서 검사하며 바이트 단위 BOM 식별은 별도 파일 인코딩 절차의 역할입니다.

자주 묻는 질문

어떤 문자를 탐지하나요?

U+200B ZERO WIDTH SPACE, U+200C ZERO WIDTH NON-JOINER, U+200D ZERO WIDTH JOINER, U+2060 WORD JOINER, U+FEFF ZERO WIDTH NO-BREAK SPACE, U+180E MONGOLIAN VOWEL SEPARATOR를 인식합니다. 보이지 않거나 기본적으로 무시되는 모든 Unicode 문자를 열거한다고 주장하지 않습니다.

일반 정리는 무엇을 보호하나요?

일반 정리는 U+200B와 U+FEFF를 제거합니다. ZWNJ, ZWJ, WORD JOINER, MVS는 문자 결합, 이모지 표시, 줄바꿈, 특정 문자 체계 동작을 바꿀 수 있어 보존합니다. 검사만은 아무것도 바꾸지 않고 종류 선택에서는 직접 지정할 수 있습니다.

ZWJ를 제거하면 왜 이모지가 달라질 수 있나요?

U+200D는 여러 이모지 요소를 화면에서 하나의 시퀀스로 연결하고 복잡한 문자 체계의 결합에도 영향을 줍니다. 제거하면 하나의 이모지가 여러 기호로 나뉘거나 글자 모양이 바뀔 수 있어 일반 정리에서는 선택하지 않습니다.

정리하면 텍스트 정규화나 줄바꿈도 바뀌나요?

아닙니다. 선택하지 않은 문자는 디코딩된 JavaScript 문자열 안에서 그대로 유지됩니다. LF, CRLF, CR, 탭, 공백, 정규화 형식, 마지막 줄바꿈도 제거 엔진이 다시 쓰지 않습니다.

파일 BOM을 검증하고 복구할 수 있나요?

완전하게는 할 수 없습니다. 디코딩된 텍스트 맨 앞의 U+FEFF 코드 포인트는 보고하지만 원본 파일의 인코딩 서명 바이트는 복구할 수 없습니다. UTF-8, UTF-16, UTF-32 파일 서명에는 바이트 기반 BOM 도구가 적합합니다.

제로 폭 문자를 찾으면 공격이라고 볼 수 있나요?

아닙니다. 위치 증거는 불일치, 의심스러운 식별자, 난독화 문자열을 조사하는 데 도움이 되지만 의도는 문맥으로 판단해야 합니다. 손대지 않은 원문을 검토하고 정리한 값을 실제 소비 시스템에서 검증하세요.

붙여넣은 텍스트가 서버로 전송되나요?

검사, 제거, 파일 읽기, 복사, 다운로드 생성은 브라우저에서 로컬로 실행되며 입력을 변환 서버로 보내지 않습니다. 브라우저 확장 프로그램, 기기 정책, 결과를 붙여넣는 목적지는 이 처리 경계 밖입니다.

이 도구를 검증한 방법

관리 및 검수 검토일

검증 방법: 제로 폭 문자를 안전하게 검사하고 제거하기에서 다음 가이드 픽스처로 검증을 시작했습니다: “이모지 결합 문자를 유지하면서 일반 구분자 제거”. “정확한 원문과 출처 보존”부터 “각 제어 문자의 가능한 영향 분류”까지 실행해 생성 결과를 기대값과 대조했습니다. 별도 한계 검토에는 “위치를 검토하기 전에 원문 대체”, “ZWJ와 ZWNJ를 무해한 공백으로 삭제” 항목을 사용했습니다.

기대 결과: 주소와 legacy text의 일반 zero-width 구분자는 제거됐지만 👩‍💻 안의 ZWJ는 남아 emoji sequence가 갈라지지 않았습니다.

검증한 작업 가이드 열기

관련 작업 가이드

도구를 열기 전에 자주 쓰는 작업 흐름과 예시를 확인하세요.

작업 가이드

게시·초안 비교 전에 텍스트 측정치를 감사하는 방법

편집자, 연구자, 지원팀, SEO 검토자가 초안의 단어 반복, 목표 구문 과다, 읽기 난이도, 부정적 표현, 다른 버전과의 유사성을 물을 때 사용하는 절차입니다. 분석 전에 단위·언어·정규화·분모·한도·해석을 고정하고 결정론적 근거와 편집 판단을 분리합니다.

작업 가이드

재현 가능한 텍스트 픽스처와 장식 샘플을 안전하게 준비하기

테스트, 목업, 터미널 데모, 문서 예시 또는 실패해도 해가 없는 시각 실험에 생성·재배열 텍스트가 필요할 때 사용하는 절차입니다. 구조 작업과 장식을 구분하고, 원문과 구분자 동작을 보존하며, 모든 seed와 제한을 기록합니다. FIGlet·미러·거꾸로·영어 점자 부분집합·Zalgo가 글꼴·보조 기술·검색·복사 환경을 통과하지 못할 수 있으면 항상 평문 대체 내용을 함께 둡니다.

작업 가이드

시스템 간 텍스트 비교 전에 Unicode 정규화하기

신뢰할 수 있는 Unicode 정규화 작업은 원본 표현을 보존하고 대상 시스템의 계약을 확인한 뒤 정준 정규화와 호환 접기를 구분합니다. 정확한 코드 포인트와 숨은 문자를 검사하고, 완성된 값을 비교한 다음 실제 저장·조회 환경에서 다시 검증합니다.

작업 가이드

Unicode 계산 단위별 텍스트 길이 제한 검증

신뢰할 수 있는 길이 검증은 대상 시스템의 계약에서 시작해 원본 표현을 보존하고, 여러 Unicode 단위를 측정하며, 정규화와 보이지 않는 문자 fixture를 포함하고, 제한값 전후를 실행한 뒤 저장·전송 결과를 다시 읽어 확인합니다.

작업 가이드

제로 폭 문자를 제거하기 전에 위치와 의미 검사하기

화면에는 같은 두 값이 비교, 검색, 줄바꿈, 파싱, 표시에서 다르게 동작할 때 사용하는 절차입니다. 수정 전에 지원 제어 문자를 찾고 일반 숨은 구분자와 문자 결합 및 줄바꿈 제어를 구분하며, 줄바꿈과 정규화 상태를 그대로 둔 채 각 제거가 안전한 이유를 기록합니다.

관련 도구

관리 중인 다른 작업 흐름을 이어서 사용해 보세요

모든 도구 둘러보기