Generatore di slug
Trasforma un titolo in uno slug per URL, con traslitterazione di ebraico, arabo, cirillico e greco, la forma Unicode e il controllo delle collisioni.
creme-brulee-grusse-aus-munchencrème-brûlée-grüße-aus-münchencr%C3%A8me-br%C3%BBl%C3%A9e-gr%C3%BC%C3%9Fe-aus-m%C3%BCnchenIl browser mostra la forma leggibile qui sopra e invia questa. Sono lo stesso percorso.
Che cosa fa questo strumento
Incolla un titolo in qualsiasi scrittura e torna indietro come lo slug che un URL può portare: minuscole, senza punteggiatura, parole unite dal separatore che scegli. Gli accenti latini vengono rimossi, ed ebraico, arabo, cirillico e greco vengono traslitterati in lettere latine.
Accanto allo slug sta lo stesso titolo conservato nella propria scrittura. Anche quella forma è un percorso lecito, e per le scritture che nella traslitterazione perdono di più è spesso la risposta migliore: entrambe nascono quindi da un solo titolo invece che dallo strumento che sceglie al posto tuo.
A che cosa serve uno slug
Uno slug è la parte leggibile di un URL: il pezzo dopo l’ultima barra che dà un nome alla pagina invece di numerarla. Esiste perché un percorso che si legge come parole sopravvive all’essere incollato in un messaggio, stampato su una slide o letto a voce alta al telefono, e un identificatore numerico non fa nulla di tutto ciò.
È anche il motivo per cui la sua forma è così vincolata. Uno slug deve essere stabile — cambiarlo rompe ogni collegamento che già punta alla pagina — e deve essere inequivocabile quando lo si scrive a mano, il che esclude gli spazi, le maiuscole che chi legge potrebbe riprodurre o no, e la punteggiatura che significa qualcosa per una shell o per un parser Markdown.
Come vanno via gli accenti
La maggior parte dei diacritici latini la rimuove la piattaforma e non una tabella. Unicode definisce é come scomponibile in una e semplice seguita da un accento acuto combinante, perciò normalizzare a quella forma scomposta e poi scartare ogni segno combinante lascia dietro la lettera semplice. La stessa operazione gestisce ñ, ç, ő e qualche centinaio di altre, e non può invecchiare, perché usa i dati Unicode che il browser già porta con sé.
Non gestisce tutto, e vale la pena conoscere il vuoto. Una lettera il cui segno è un tratto che attraversa il glifo anziché un segno sopra — ø, ł, đ, ħ, ŧ — è un carattere unico e indivisibile senza alcuna scomposizione, quindi togliere i segni la lascia esattamente com’era. Lo stesso vale per una legatura: ß, æ e œ stanno ciascuna per una sequenza di suoni, non per una lettera più un ornamento. Tutte hanno bisogno di una grafia esplicita, e senza di essa sparirebbero e basta dallo slug.
Perché l’impostazione della lingua cambia la risposta
Non esiste un’unica romanizzazione corretta di ü. Il tedesco la scrive ue da prima che la dieresi esistesse — i due punti nacquero come una piccola e in apice — quindi Müller è propriamente mueller, e a un lettore tedesco muller sembrerà sbagliato. Francese, spagnolo e portoghese trattano i loro diacritici come accenti su una lettera che per il resto è sé stessa, quindi crème brûlée è propriamente creme-brulee, e scriverlo cruemme sarebbe privo di senso.
Le lingue nordiche si contraddicono fra loro allo stesso modo. Il danese e il norvegese raddoppiano la vocale, seguendo la vecchia grafia che la lettera ha sostituito; lo svedese no:
- Tedesco — ä diventa ae, ö diventa oe, ü diventa ue, ß diventa ss. München diventa muenchen.
- Danese e norvegese — æ diventa ae, ø diventa oe, å diventa aa. Ålborg diventa aalborg.
- Svedese — ä diventa a, ö diventa o, å diventa a. Ålborg diventa alborg.
- Generico — ogni segno cade e resta la lettera di base. Ålborg diventa alborg, München diventa munchen.
Non sono approssimazioni rivali di una sola risposta; sono quattro risposte corrette diverse a quattro domande diverse. Solo una può essere quella predefinita, perciò l’impostazione è in vista e lo strumento dice quale convenzione ha prodotto ciò che stai guardando. Una lettera è uguale ovunque: ß è una legatura e non un accento, quindi scartarla cancellerebbe un suono, ed è ss in ogni impostazione qui presente.
Le scritture che richiedono una tabella
Niente nel browser romanizza il cirillico, il greco, l’ebraico o l’arabo, perciò ciascuno è una tabella scritta a mano contro uno standard pubblicato. Due se la cavano bene, perché scrivono le proprie vocali:
- Il cirillico segue BGN/PCGN, la romanizzazione delle mappe e dei passaporti in inglese: ж è zh, ч è ch, щ è shch, х è kh. Москва diventa moskva e Чехов diventa chekhov.
- Il greco segue ELOT 743, digrammi compresi: ου è ou e non oy, e ευ è ev. Αθήνα diventa athina ed Ευρώπη diventa evropi.
ISO 9 è l’altro standard cirillico noto e qui non viene usato di proposito. È reversibile, ed è il suo scopo, ma ci riesce con i diacritici: ж vi è ž. Uno slug non ha posto per un caron, quindi si appiattirebbe subito in z, e Жуков e Зуков diventerebbero lo stesso slug. Il digramma di BGN sopravvive all’appiattimento.
Un dettaglio della tabella cirillica è facile da sbagliare e merita di essere detto. ё e й sembrano lettere con un accento, e Unicode le scompone proprio così, ma il segno è ciò che le rende lettere diverse e non un ornamento sulla stessa. Togliere i segni prima di consultare la tabella — l’ordine giusto per ogni altra scrittura qui presente — trasforma in silenzio Ёлка in elka e Андрей in andrei.
L’ebraico e l’arabo, e ciò che perdono
Entrambe le scritture scrivono consonanti e lasciano quasi tutte le vocali a punti che il testo ordinario non porta. Non è un problema di codifica che questo strumento potrebbe risolvere con una tabella migliore: l’informazione non è nel testo. «מאמר» sono quattro lettere, mem-alef-mem-resh, e la lettura maamar viene da chi già conosce la parola. Lettera per lettera può solo essere mamr.
Ciò che si può fare viene fatto. Dove una lettera funge anche da segno vocalico si sfrutta la posizione, perché è l’unico indizio che un testo non puntato lascia:
- ו e י sono consonanti a inizio di parola e lettere vocaliche al suo interno, ed è questo che rende שלום shlom invece di shlvm.
- Un וו o uno יי doppio è la consonante in entrambi i casi: quel raddoppiamento è esattamente il modo in cui l’ebraico distingue le due letture.
- ב, כ e פ sono occlusive a inizio di parola e fricative al suo interno. Il dagesh che segna la differenza è un punto vocalico, quindi la posizione è tutto ciò che resta.
- Una lettera seguita da gheresh è il suono per cui l’alfabeto non ha una lettera: ג׳ è j, צ׳ è ch, ז׳ è zh. Ignorarlo farebbe di ג׳אז un’altra parola.
- Le consonanti enfatiche arabe collassano sulle rispettive semplici, perché ASCII non ha dove mettere il punto sottoscritto che le distingue. صابر e سابر producono lo stesso slug.
Il risultato è leggibile e riconoscibile, e non è una grafia che qualcuno definirebbe corretta. Lo strumento lo dice su ogni risultato ebraico o arabo invece di presentare una risposta con perdite come se fosse finita — e indica la forma qui sotto, che non perde proprio nulla.
Il percorso Unicode, che non richiede traslitterazione
Il percorso di un URL non è limitato ad ASCII. L’RFC 3987 definisce l’IRI — un identificatore che può contenere qualsiasi carattere Unicode — e la regola per metterlo sul filo è codificare i byte UTF-8 come sequenze di percento. Ogni browser lo fa da vent’anni, ed è per questo che Wikipedia serve i suoi titoli ebraici e russi con il loro nome e la barra degli indirizzi li mostra leggibili.
Quindi la seconda uscita qui è il titolo con punteggiatura e spaziatura ripulite e nient’altro toccato, e la terza è come appare davvero sul filo. Sono lo stesso percorso: quella leggibile è ciò che mostra un browser e ciò che una persona copia, quella codificata è ciò che il server registra.
Quale usare è una decisione vera e non una formalità. La forma Unicode non perde nulla, si legge correttamente per chiunque parli la lingua ed è quella che un motore di ricerca mostrerà. La forma traslitterata sopravvive all’essere incollata in posti che rovinano le codifiche, entra in sistemi che danno per scontati percorsi ASCII e si può leggere al telefono. Per l’ebraico e l’arabo in particolare la forma Unicode è di solito la risposta migliore, proprio perché la traslitterazione non può recuperare le vocali.
Le collisioni, e perché non vengono risolte per te
Fare uno slug toglie la punteggiatura, quindi titoli che differiscono solo per quella smettono di differire del tutto. «La nostra guida al CSS» e «La nostra guida al CSS!» sono due articoli e un solo slug. In modalità elenco ogni scontro del genere è segnalato con la riga con cui collide, perché questo è il guasto che un gestore di contenuti nasconde: aggiunge un suffisso in silenzio, pubblica, e l’URL che ti aspettavi appartiene all’altro articolo.
Il suffisso è disponibile come interruttore e produce lo stile di WordPress e Django — la-nostra-guida-al-css, la-nostra-guida-al-css-2 — per il caso in cui un elenco debba essere incollato da qualche parte così com’è. È spento per impostazione predefinita perché una collisione è di solito un problema di contenuto e non di nomi, e la collisione resta segnalata anche a interruttore acceso, così accenderlo non nasconde nulla.
La lunghezza, e tagliare nel punto giusto
Un limite di lunghezza taglia su un confine di separatore, mai dentro una parola. Troncare a metà parola non produce tanto uno slug più corto quanto uno diverso — introduction-to-crypt non è un introduction-to-cryptography più ordinato — e mezza parola è una parola che significa altro. Se una sola parola supera il limite non c’è confine su cui tagliare, e viene restituita intera invece che affettata.
Non esiste un limite universalmente giusto. I motori di ricerca mostrano all’incirca i primi sessanta o settanta caratteri di un URL, e certi sistemi vecchi limitano un segmento di percorso, ma nulla si rompe a un numero preciso. Lasciare il campo vuoto lascia lo slug lungo quanto il titolo richiede.
Domande frequenti
- Quali caratteri sono sicuri in uno slug per URL?
- Lettere ASCII minuscole, cifre e un solo separatore funzioneranno ovunque senza eccezioni. Il trattino è il separatore convenzionale; il trattino basso funziona allo stesso modo ma si vede peggio sotto un collegamento sottolineato. Spazi, maiuscole e punteggiatura sono tutti tecnicamente codificabili e tutti causano guai nella pratica, perciò uno slug li elimina.
- Trattino o trattino basso?
- Il trattino, per due ragioni che sopravvivono alle mode. È ciò che usa ogni grande piattaforma, quindi è ciò che si aspettano i lettori e gli altri strumenti, e sparisce sotto la sottolineatura che quasi tutti i collegamenti portano, cosa che il trattino basso non fa. La scelta è offerta qui perché i sistemi esistenti hanno convenzioni esistenti, e la coerenza dentro un unico sito conta più di entrambe le risposte.
- Perché il mio titolo in ebraico o arabo perde le vocali?
- Perché non sono mai state scritte. Entrambe le scritture segnano quasi tutte le vocali con punti che il testo ordinario omette, quindi una lettura lettera per lettera è tutto ciò che uno strumento può produrre senza un motore di vocalizzazione che indovini quale parola si intendeva. Questo traslittera ciò che c’è davvero, lo dichiara sul risultato e offre la forma di percorso Unicode, che conserva il titolo esattamente come è stato digitato.
- Un URL può contenere direttamente ebraico, arabo o cinese?
- Sì. Un percorso può portare qualsiasi carattere Unicode; sul filo viene codificato in percentuale come UTF-8 e il browser lo mostra leggibile. È così che Wikipedia serve i titoli degli articoli in ogni lingua che copre. Questo strumento mostra sia la forma leggibile sia quella codificata, dato che la seconda è ciò che compare nei registri del server e nelle statistiche.
- Perché Müller a volte è mueller e a volte muller?
- Perché entrambi sono corretti, in lingue diverse. Il tedesco scrive la dieresi per esteso — i due punti nacquero come una piccola e in apice — mentre francese e spagnolo trattano i loro diacritici come segni su una lettera che per il resto è sé stessa. L’impostazione della lingua sceglie una convenzione, e lo strumento ti dice quale ha applicato.
- Perché due dei miei titoli producono lo stesso slug?
- Perché fare uno slug rimuove punteggiatura e maiuscole, spesso l’unica cosa che separa due titoli. La modalità elenco segnala ogni collisione con la riga con cui si scontra. Puoi accendere il suffisso -2 in stile WordPress, ma la domanda di fondo — se due articoli debbano davvero avere quasi lo stesso nome — merita una risposta prima.
- Qualcosa di ciò che digito viene inviato a un server?
- No. Ogni trasformazione avviene nel tuo browser; nulla viene caricato o registrato, e funziona senza connessione di rete.