Bawat karakter, bawat haba, at ang mga hindi nakikitang sumisira.
Mga hindi nakikitang karakter. Wala silang ipinapakita, kaya MUKHANG tama ang teksto pero hindi ito tumutugma kapag inihambing. Ang zero-width space sa password field o ang BOM sa unahan ng CSV ang karaniwang sanhi ng “pero mukha namang pareho”.
Mga espasyong hindi ang ordinaryong U+0020. Halos laging na-paste mula sa word processor o web page. Nakakalusot ang mga ito sa trim() na ASCII whitespace lang ang tinatanggal, at sinisira nila ang split sa " ".
Typographic na bantas na ipinalit ng word processor — curly quotes, en at em dash, ellipsis na iisang karakter. Ayos sa prosa, pero syntax error sa code, CSV o JSON string.
Para saan ito
Hanapin ang mga nakatagong karakter sa isang teksto — hindi nakikitang espasyo, curly quote, kakaibang gitling — kapag tinatanggihan ito ng form o hindi nagtutugma ang dalawang kopyang mukhang magkapareho.
Bago magsimula
Ihanda ang tekstong may problema, kinopya mula sa pinanggalingan nito — Word, PDF, chat app. Sa browser mo ito sinusuri at walang ipinapadala kahit saan.
Alisin ang sample
Pindutin ang Burahin para alisin ang sample sa kahon.
I-paste ang teksto mo
I-paste ito sa Teksto. I-paste, huwag i-type ulit: kapag tinype mo ulit, mawawala ang mismong mga karakter na hinahanap mo.
Suriin
Pindutin ang Suriin. Nag-a-update rin ang mga bilang sa itaas habang nagpe-paste o nagta-type ka.
Basahin ang nakita nito
Pinangangalanan ng Ano ang tingnan ang bawat klase ng problema, kung ilan, at ang code nila, gaya ng U+200B. Sa Karakter sa karakter, nakalista nang sunod-sunod ang bawat karakter; tuldok ang lumalabas sa nakatago, para makita mo kung nasaan ito.
Ayusin ang mga letrang may tuldik, kung inaalok
Kung lumabas ang button na Gawing NFC, may mga letrang may tuldik na kakaiba ang pagkakaimbak. Pindutin ito para isulat ang mga ito sa karaniwang anyo, para magtugma ang dalawang kopya ng iisang salita.
Pagbasa ng resulta
Kung may problema
May apat na sagot sa tanong na “gaano katagal ito”, at magkakaiba silang lahat.
Ang "👨👩👧" ay 8 sa .length ng JavaScript, 5 na code point, 18 byte sa UTF-8, at 1 karakter sa taong nag-type nito.
Byte ang sinusukat ng VARCHAR(20). UTF-16 unit ang binibilang ng form validator. Ang gumagamit ay binibilang ang nakikita niya. Pumili ka ng isa at tawagin mong “haba”, at may pangalang tatanggihan ng field na mukhang sapat naman.
At may mga karakter na hindi lumalabas kahit nandiyan. Zero-width space sa password. BOM sa unahan ng CSV kaya sira ang unang pamagat ng hanay. Non-breaking space na galing sa Word. Tama ang tingin sa teksto at hindi pantay sa paghahambing.
Hiwalay ang mga control ng direksyon dito. Hindi lang sila hindi lumalabas — binabaligtad nila ang pagkakasunod ng teksto sa paligid nila, kaya maaaring iba ang nababasa at iba ang tumatakbo.
Dahil apat na magkaibang bagay ang sumusukat sa "haba". Ang VARCHAR na column at ang HTTP header ay bumibilang ng BYTE. Ang .length ng JavaScript ay bumibilang ng UTF-16 unit. Ang hangganan ng karakter sa form ay karaniwang code point. At ang taong nagtitipa ay binibilang ang nakikita niya. Para sa "👨👩👧" ay 18, 8, 5 at 1 iyon. Ang pagpili ng isa at pagtawag ditong haba ang dahilan kung bakit may pangalang tinatanggihan ng patlang na mukhang sapat naman ang haba.
Karaniwan ay isa sa tatlong bagay, at natatagpuan silang lahat nito. Isang hindi nakikitang karakter — zero-width space, soft hyphen, BOM sa unahan ng file. Isang espasyong hindi U+0020, kadalasang non-breaking space na galing sa word processor. O ibang anyo ng normalisasyon: ang "é" ay puwedeng isa o dalawang code point, at magkamukha ang dalawa sa mata at hindi pantay sa paghahambing sa halos bawat wika.
Binabaligtad nila ang pagkakasunod ng tekstong nasa paligid nila. Iba ang uri nila sa karakter na basta hindi lumalabas: ang linya ng source code na may U+202E ay puwedeng basahin sa isang paraan at tumakbo sa iba, at iyon ang uri ng pag-atakeng Trojan Source. May sarili silang natuklasan, mas mataas sa lahat maliban sa sirang teksto, sa halip na nakalista katabi ng isang smart quote.
Depende sa gamit ng teksto. Tama ang smart quote sa sulatin at syntax error sa JSON o CSV. Sinasadya ang non-breaking space sa "10 kg" at bug ito sa key ng database. Ganap na wasto ang astral na karakter at problema lang ito kung may humihiwa ayon sa .length sa dulo ng daloy. Pinapangalanan ng tool kung ano ang nandoon at bakit ito mahalaga; nasa iyo ang pasya kung nararapat ito.
Dahil megabyte ang buong Unicode character database at walang anumang dependency na kasama ang engine na ito. Ang bawat karakter na sulit bigyan ng babala ay eksaktong pinapangalanan. Ang lahat ng iba ay kinikilala sa pamamagitan ng Unicode block nito, na makatotohanan at maikli. Ang paggawa-gawa ng pangalang mukhang tama ay mas masama kaysa sa isang tapat.
Ang NFC ay ang pinagsanib na anyo ng normalisasyon, at iyon ang default ng web. Kung naghahambing ka ng string, ginagamit sila bilang key, o itinatago para sa pagsusuri ng pagkakaisa, mag-normalise muna — kung hindi ay tatanggapin ang dalawang magkamukhang halaga at hindi kailanman tatakbo ang pagsusuri mo sa doble. Lumalabas lang ang pindutan kapag wala pa sa NFC ang teksto.
Mahalaga
Runs entirely in your browser; nothing is transmitted. Full Unicode names are not shipped — every character worth warning about is named exactly, and the rest are identified by block rather than guessed at. Walang ipinapadala sa mga server namin ang tina-type mo rito — sa browser mo tumatakbo nang buo ang pagkuwenta.