Normalizzatore Unicode

La stessa stringa visibile può essere memorizzata come sequenze di byte diverse a seconda che un accento esista come un singolo punto codice o come una lettera più un segno combinante. Questo normalizzatore converte il testo tra le quattro forme di normalizzazione Unicode (NFC, NFD, NFKC, NFKD) in modo che le tue stringhe si confrontino in modo pulito in database, indici di ricerca, script di deduplicazione e corrispondenze regex.

Come normalizzare il testo Unicode

  1. 1

    Incolla il tuo input

    Inserisci la stringa: lettere accentate, testo CJK, legature, qualsiasi cosa sembri incoerente.

  2. 2

    Scegli una forma

    Scegli NFC (composta, la consueta forma web), NFD (decomposta), NFKC (composta di compatibilità) o NFKD (decomposta di compatibilità).

  3. 3

    Confronta i conteggi

    Lo strumento indica il numero di caratteri (punti codice) e la lunghezza in byte prima e dopo, così vedi se la forma ha accorciato o allungato la stringa.

  4. 4

    Copia l'output normalizzato

    Usa il risultato nel tuo database, nel payload API, nel generatore di slug o in una fixture di test.

Le quattro forme e quando usarle

La normalizzazione Unicode è definita dall’annesso standard UAX #15. Le quattro forme differiscono lungo due assi: canonica rispetto a compatibilità, e composta rispetto a decomposta.

Riferimento affiancato

Forma Composizione Mappatura Quando usarla
NFC Composta Solo canonica Predefinita per contenuti web, database, nomi file
NFD Decomposta Solo canonica Elaborazione del testo che rimuove gli accenti per carattere
NFKC Composta Include compat. Ricerca, identificatori, filtri antispam, riduzione per la visualizzazione
NFKD Decomposta Include compat. Normalizzazione aggressiva prima di rimuovere i diacritici

Le forme canoniche conservano il significato

Digita é e cambia forma. NFC indica 1 carattere e 2 byte (il singolo punto codice U+00E9), mentre NFD indica 2 caratteri e 3 byte (una e semplice seguita da un accento acuto combinante, U+0301). I due appaiono identici sullo schermo ma sono sequenze di byte diverse, e proprio questa discrepanza è ciò che la normalizzazione risolve. Le forme canoniche si limitano a riordinare i byte, quindi é in entrambe le forme significa sempre la lettera e con accento acuto.

Cosa cambia davvero la “compatibilità”

Le forme K (NFKC, NFKD) riscrivono anche caratteri che sembrano affini ma portano una formattazione diversa. È un’operazione con perdita: non puoi recuperare l’originale. Ad esempio:

  • fi (U+FB01, legatura latina minuscola fi) diventa fi (due lettere)
  • ① (U+2460, cifra uno cerchiata) diventa 1
  • ㌀ (U+3300, il quadrato CJK “apaato”) diventa アパート
  • La A a larghezza piena (U+FF21) diventa A

È potente per la ricerca e la deduplicazione ma distruttivo per la tipografia, quindi ricorri alle forme K solo quando la fedeltà visiva non conta.

Una regola pratica

  • Memorizza il contenuto dell’utente in NFC.
  • Confronta gli identificatori in NFC affinché café scritto come un singolo punto codice e café scritto come e + U+0301 coincidano; passa a NFKC quando vuoi che anche fi e fi, oppure la A a larghezza piena e A, risultino uguali, come fanno le regole per gli identificatori di UAX #31.
  • Produci slug senza accenti normalizzando in NFD ed eliminando il blocco dei segni combinanti da U+0300 a U+036F.

Domande frequenti

Di solito significa che il tuo input era già nella forma di destinazione. Incolla testo che mescola fonti (un nome file Mac, un frammento di PDF copiato, una riga di un database datato) e sarà molto più probabile vedere cambiare i conteggi di caratteri e byte.

Per gli URL di visualizzazione, NFC. Per slug in cui vuoi ASCII puro, normalizza in NFD, rimuovi i segni combinanti con una regex su U+0300 a U+036F, poi metti tutto in minuscolo. NFKD è un’alternativa quando vuoi anche ridurre legature e cifre cerchiate.

Le forme canoniche (NFC, NFD) non cambiano mai il significato, riordinano soltanto i byte. Le forme di compatibilità (NFKC, NFKD) invece lo cambiano: le legature si separano, le lettere a larghezza piena si riducono e gli apici si appiattiscono. Usale solo quando è ciò che desideri.

La normalizzazione avviene sul nostro server tramite la classe Normalizer di PHP e il risultato torna nella stessa richiesta; il tuo testo non viene memorizzato. Registriamo solo un evento anonimo che indica quale forma è stata applicata, mai il contenuto in sé.

Strumenti correlati

Strumento disponibile in altre lingue