2009-05-04 4 views
10

Dopo aver studiato un po 'come il modo in cui le persone slugify i titoli, ho notato che spesso manca come affrontare i titoli di inglese.regole per slug e unicode

la codifica dell'URL è molto restrittiva. Vedere http://www.blooberry.com/indexdot/html/topics/urlencoding.htm

Così, per esempio come fanno le persone affrontano per lumache titolo per cose come

"una lagrima cayó en l'arena"

Uno può venire con un tavolo ragionevole per Indo lingue europee, vale a dire. cose che possono essere codificate tramite ISO-8859-1. Ad esempio, una tabella di conversione si tradurrebbe 'A' => 'a', quindi il proiettile sarebbe

"una-lagrima-Cayo-en-la-arena"

Tuttavia, sto usando unicode (in particolare usando la codifica UTF-8), quindi non ci sono garanzie su quali codici di codice otterrò (devo prepararmi per cose che non possono essere codificate ISO-8859-1

I a nushell Come gestirlo? Devo trovare una tabella di conversione per i caratteri nell'intervallo ISO_8859-1 (< 255) e lasciare tutto il resto?

MODIFICA: Per dare un po 'più di contesto, a priori, non mi aspetto di inserire i dati nelle lingue europee non indo, ma mi piacerebbe avere un piano se trovo tali dati. Una tabella di conversione per ASCII estesa sarebbe carina. Qualche indicazione?

Inoltre, dal momento che la gente si chiede, sto usando python, in esecuzione su Google App Engine

+0

A proposito, c'è una buona ragione per cui Unicode non è consentito negli URL? – Zifre

risposta

8

La tabella di traslitterazione quasi completa (per set di caratteri latini, greci e cirillici) è disponibile in slughifi library. È orientato verso Django, ma può essere facilmente modificato per adattarsi alle esigenze generali (lo uso con l'app basata su Werkzeug su AppEngine).

+0

Grazie zgoda, nella mia situazione (python, motore di app), questo slugify rinforzato farà il lavoro. – bustrofedon

+0

Assicurati di aggiungere '# - * - coding: utf-8 - * -' all'inizio di slughifi.py –

1

Se tutto il resto fallisce, è possibile utilizzare una tabella di conversione, ma ci potrebbe essere una soluzione migliore rendimento disponibili. Quale lingua lato server stai usando?

+0

Sto usando python (il sito è in esecuzione nel motore dell'app google) – bustrofedon

2

In generale, questo dipenderà dalla lingua che ci si aspetta di ottenere. Se la tua base utente principale è giapponese, è improbabile che l'eliminazione di tutto tranne i caratteri ISO-8859-1 non vada a buon fine.

Detto questo, un'opzione potrebbe essere quella di utilizzare la modalità di traslitterazione, se la libreria di conversione del set di caratteri lo supporta. Ad esempio, con GNU iconv, si può fare:

] echo Una lágrima cayó en la arena|iconv -f utf8 -t ascii//TRANSLIT 
Una lagrima cayo en la arena 

Come si può vedere, i caratteri accentati sono stati convertiti automaticamente a qualcosa nella gamma ASCII. Come tradurre questo codice dipende ovviamente dalla lingua che stai usando, ma se la tua lingua è basata su GNU iconv per la conversione di charset (e se è su Linux, probabilmente lo è), questo trucco può probabilmente essere applicato direttamente da semplicemente specificando "ascii // TRANSLIT" come set di caratteri convertito.

Una cosa da notare con questo, tuttavia, è efficace solo con caratteri che "somigliano" a qualcosa in ASCII. Per esempio:

] echo 我輩は猫である。名前はまだない。|iconv -f utf8 -t ascii//TRANSLIT            
???????????????? 

Come si può vedere, non è di grande aiuto per il giapponese, e ha bisogno di ulteriore elaborazione in seguito per rimuovere i caratteri non adatto per gli URL.

+0

Grazie, non sapevo dell'abilità di iconv di "traslitterare". Tuttavia, nel contesto delle applicazioni Web, iconv non è adatto. Per non parlare del fatto che il sito è in esecuzione su Google App Engine. – bustrofedon

4

Uso semplicemente utf-8 per i percorsi URL. Finché il dominio non è IDF FF3, IE funziona perfettamente con questo. Google legge e li visualizza correttamente. IRI RFC consente Unicode. Assicurati di analizzare correttamente gli URL in arrivo.

+0

sicuro, ma come si fa una RegEx per i caratteri Unicode? [- \ w] non corrisponde a ** lágrima-cayó-en-la-arena ** –

+0

Uso .NET e supporta Unicode in RegEx. Per javascript controllare jquery.validate e http://www.ibm.com/developerworks/web/library/wa-uri/index.html – felixg