Detektor niewidzialnych znaków

Wklej dowolny tekst, a detektor wykryje wszystkie niewidoczne znaki, jakie się w nim znajdują: spacje o zerowej szerokości, oznaczenia kierunku, znaczniki BOM, miękkie dywizy, spacje nierozdzielające oraz grupę kontrolnych punktów kodowych Unicode, które wyglądają jak puste miejsce, lecz psują wyszukiwanie, porównywanie (diff) oraz kopiowanie i wklejanie. Każdy wykryty znak jest opisany swoim punktem kodowym (U+200B), oficjalną nazwą w Unicode oraz pozycją w ciągu, dzięki czemu precyzyjnie zlokalizujesz ukryty błąd, zanim go usuniesz.

Jak wykryć niewidzialne znaki

  1. 1

    Wklej tekst

    Wpisz podejrzany fragment kodu, fragment kodu, skopiowaną wiadomość lub wartość konfiguracji.

  2. 2

    Uruchom skanowanie.

    Narzędzie przejmuje każdy punkt kodu i oznacza wszystkie, które odpowiadają listy niewidzialnych lub formatowych znaków.

  3. 3

    Przeczytaj raport.

    Każdy wynik pokazuje swoją pozycję (liczoną od 1), punkt kodowy w formacie `U+HHHH` oraz nazwę Unicode (np. spacja o zerowej szerokości, BOM itd.).

  4. 4

    Oczyść tekst

    Wykorzystaj akcję „Zastąpić", aby usunąć lub zobrazować ukryte znaki, a następnie wklej oczyszczoną wersję.

Niewidzialne znaki i ich pochodzenie

Te znaki istnieją z uzasadnionych powodów – takich jak układ tekstu, kierunek pisowni czy kombinowanie znaków. Stają się jednak błędami, gdy wychodzą poza kontekst, dla którego zostały zaprojektowane, i pojawiają się w kodzie, konfiguracjach, zapytaniach wyszukiwania lub nazwach użytkowników.

Znaki, których szuka detektor

Punkt kodowy Nazwa Gdzie zwykle się przemyca
U+200B Spacja o zerowej szerokości Edytory tekstu sformatowanego, edytory tekstu
U+200C Nie-łącznik o zerowej szerokości Typografia perska i hindi
U+200D Łącznik o zerowej szerokości Sekwencje emoji, pisma indyjskie
U+200E Znacznik od lewej do prawej Tekst zawierający pisma LTR i RTL jednocześnie
U+200F Znacznik od prawej do lewej To samo
U+202A..E Osadzanie / nadpisanie To samo; czasem wykorzystywane złośliwie (Trojan Source)
U+2028 Separator wiersza Kopiowany z Worda, psuje kodery JSON
U+2029 Separator akapitu To samo
U+FEFF Znacznik kolejności bajtów Pliki zapisane jako UTF-8 z BOM w Notepadzie
U+00A0 Spacja nierozdzielająca Spacja typograficzna z Worda
U+00AD Miękki dywiz Wskazówki dzielenia wyrazów w tekście sformatowanym

Typowe objawy błędu związanego z ukrytym znakiem

  • Porównanie ciągów, które „powinno“ być równe, w rzeczywistości równe nie jest. Skopiuj wartości do tego narzędzia i sprawdź liczbę bajtów.
  • Wyrażenie regularne (regex), które pasuje na oko, ale zawodzi w kodzie. Często jest to U+00A0 podszywający się pod spację.
  • Parser JSON wysypuje się na wklejonym ładunku. Zwykle chodzi o BOM na początku lub o U+2028 w literale tekstowym, który JavaScript odrzuca wewnątrz JSON.
  • Tytuł SEO ma niewłaściwą długość. Spacja o zerowej szerokości przekracza limit bez żadnej widocznej zmiany.

Perspektywa Trojan Source

Dwukierunkowe znaki nadpisujące (U+202E, U+2066..U+2069) mogą sprawić, że kod źródłowy będzie renderowany w jednej kolejności, a kompilowany w innej, to klasa ataków „Trojan Source“. Jeśli przeglądasz kod od niezaufanych współtwórców, przepuść ich diffy przez ten detektor przed scaleniem.

Najczęściej zadawane pytania

Notepad oraz niektóre starsze narzędzia Windows domyślnie stosują format „UTF-8 z BOM“. BOM (U+FEFF) jest odpowiedni dla aplikacji Windows, ale psuje wiele potoków powłoki, pliki PHP (w których BOM jest wypisywany jako wynik przed znacznikiem <?php) oraz parsery JSON.

Wygląda jak standardowa pozycja na ekranie, ale zachowuje się inaczej: nie pozwala na przerwanie linii i nie jest obsługiwana przez większość wariantów regularnego wyrażenia \s we wszystkich językach. Często pojawia się w ścieżkach plików, adresach e-mail oraz nazwach użytkowników skopiowanych z źródeł tekstowych bogatych.

Nie zawsze. W tekście arabskim, perskim lub w pismie devanagari elementy łączące o szerokości zerowej oraz te nie łączące są semantycznie obowiązkowe. W kodzie, konfiguracjach oraz większości tekstów angielskich można je swobodnie usunąć. W treściach w języku naturalnym należy użyć narzędzia do wykrywania tych elementów przed ich usuwaniem.

Nie – analiza jest przeprowadzana dla aktualnego żądania, a nic z wpisanego przez użytkownika nie jest zapisywane ani rejestrowane po stworzeniu odpowiedzi.

Powiązane narzędzia

Narzędzie jest dostępne w innych językach