bitlvl
SR

Čistač teksta

Tekst kopiran iz čet asistenta, veb stranice, PDF-a ili programa za obradu teksta nosi znakove koje ne možete da vidite: razmake nulte širine, nelomljive razmake, meke crtice, oznake redosleda bajtova, dvosmerne kontrole, a ponekad i cele skrivene poruke zapisane Unicode tag znakovima. Ovaj alat prikazuje svaki od njih i daje vam tekst bez njih. Ništa ne napušta vaš pregledač.

Ukloni
Normalizuj

Nalazi

Otkriveno

Originalni tekst sa svakim skrivenim ili sumnjivim znakom prikazanim na mestu.

Rezultati i poruke ovog alata prikazuju se na engleskom.

Odakle dolaze nevidljivi znakovi

Nijedan od njih se ne kuca namerno. Čet interfejs prikazuje odgovor asistenta kao HTML, a HTML donosi nelomljive razmake (U+00A0) oko brojeva i posle neke interpunkcije, razmake nulte širine (U+200B) tamo gde je dugačkoj reči dozvoljeno da se prelomi, i meke crtice (U+00AD) tamo gde je dozvoljeno rastavljanje. Markdown rendereri dodaju selektore varijacija pored simbola. Programi za obradu teksta i PDF-ovi dodaju tipografske razmake (tanki, dlakasti, en, em) i zakrivljene navodnike. Windows dodaje CRLF završetke redova i ponekad oznaku redosleda bajtova (U+FEFF) na početku datoteke. Kopiranje teksta zahvata sve to, a nalepljeni rezultat izgleda identično dok se pri poređenju, grepovanju, heširanju i kompajliranju ponaša drugačije.

Skriveni tekst i vodeni žigovi

Unicode ima blok tag znakova (U+E0000–U+E007F), po jedan za svaki ASCII znak, koje nijedan font ne prikazuje. Bili su namenjeni označavanju jezika, a sada važe samo unutar nekoliko emodži zastava. Pošto su nevidljivi, ali preživljavaju kopiranje i lepljenje, koriste se za skrivanje druge poruke unutar vidljive: prompt injection u dokumentu koji će AI asistent pročitati, otisak koji identifikuje kome je tekst dat, ili način da se instrukcije prokrijumčare pored filtera. Isti trik je moguć sa nizovima znakova nulte širine (svaki je jedan bit) i sa selektorima varijacija (ima ih 256, pa jedan po bajtu). Čistač uklanja sva tri i, za tag znakove, prikazuje vam dekodirani skriveni tekst.

Ono što ne može da ukloni je statistički vodeni žig, gde obrazac živi u izboru reči, a ne u bilo kom znaku. U tom slučaju u tekstu nema šta da se ukloni.

Dvosmerne kontrole

Override-i i izolati zdesna nalevo (U+202E, U+2066–2069) menjaju redosled prikaza onoga što sledi. U izvornom kodu to je napad „Trojan Source“ (CVE-2021-42574): komentar koji se prikazuje posle uslova, a kompajlira pre njega. Kompajleri i GitHub sada upozoravaju na njih; ovaj alat ih uklanja. Unicode inspektor prikazuje svaki sa tačnom pozicijom ako treba da vidite, a ne da uklonite.

Zašto su neke opcije podrazumevano isključene

  • Tipografski navodnici i crte su pravi znakovi koji pripadaju prozi. Uključite ovo kad je odredište kod, konfiguraciona datoteka ili shell, gde “ nije " a – nije -.
  • Slova-dvojnici (ćirilično а umesto latiničnog a) sumnjivi su samo u tekstu koji je inače latiničan; čistač ih u tom slučaju označava, a ćirilični pasus ostavlja na miru. Njihova zamena menja slova, pa je to izbor, a ne podrazumevano ponašanje.
  • Znakovi za privatnu upotrebu su najčešće ikone iz fontova sa ikonama. Drugde se prikazuju kao kvadratići i bezopasni su.
  • Selektori varijacija se uklanjaju samo posle slova i cifara, gde nemaju posla; posle emodžija i simbola odlučuju kako se glif prikazuje i zadržavaju se.

Isto u komandnoj liniji

perl -CSD -pe 's/[\x{200B}-\x{200D}\x{2060}\x{FEFF}\x{00AD}\x{E0000}-\x{E007F}]//g; s/\x{00A0}/ /g' in.txt
sed -i 's/\xC2\xA0/ /g; s/\xE2\x80\x8B//g' file.txt          # NBSP i ZWSP kao UTF-8 bajtovi
grep -nP '[^\x00-\x7F]' file.txt                              # prikaži svaki ne-ASCII red
cat -A file.txt | head                                        # ^M za CR, M-BM- za NBSP

Pitanja

Da li ovo uklanja AI vodene žigove?

Uklanja svaku oznaku na nivou znaka: znakove nulte širine, tag znakove, selektore varijacija i neobične razmake, što su načini na koje tekst može nevidljivo da se obeleži. Vodeni žig kodiran u samom izboru reči nije sastavljen od znakova i nijedan čistač ne može da ga ukloni.

Zašto tekst iz ChatGPT-a ili Claudea sadrži skrivene znakove?

Uglavnom kao nuspojava prikazivanja: odgovor se prikazuje kao HTML, a kopiranje HTML-a nosi nelomljive razmake, razmake nulte širine na mestima preloma i tipografsku interpunkciju. Neki alati i neki dokumenti namerno dodaju tag znakove ili nizove nulte širine. Lista nalaza vam kaže šta imate.

Da li će pokvariti emodžije?

Ne. Spojnica nulte širine koja lepi emodži sekvence (👨‍👩‍👧) zadržava se kad stoji između dva emodžija, selektori varijacija posle emodžija i u keycap znakovima se zadržavaju, kao i tag znakovi koji čine zastave pokrajina. Uklanjaju se samo spojnice između običnih slova.

Da li se tekst negde otprema?

Ne. Stranica radi u potpunosti u vašem pregledaču; ništa se ne šalje serveru. Nalepite bilo šta.

U čemu je razlika u odnosu na Unicode inspektor?

Inspektor navodi svaki znak sa kodnom tačkom, bajtovima i imenom. Čistač grupiše probleme, objašnjava ih i proizvodi očišćeni tekst. Inspektor koristite za istraživanje, čistač za ispravku.