2012-07-25 8 views
7

mi sto confrontando stringhe e devono sostituire le dieresi in JS, ma sembra JS non riconosce gli umlaut nelle stringhe. Il testo proviene dal database e nel browser gli umlaut si mostrano bene.Sostituzione dieresi in JS

function replaceUmlauts(string) 
{ 
    value = string.toLowerCase(); 
    value = value.replace(/ä/g, 'ae'); 
    value = value.replace(/ö/g, 'oe'); 
    value = value.replace(/ü/g, 'ue'); 
    return value; 
} 

come modelli di ricerca ho provato:

  • "A", "O", "ü"
  • /A /,/o /,/u/
  • "ä" , "ö", "ü" (la disperazione e totale ;-))

per essere sicuri, che non è una questione con la funzione di sostituzione Ho provato indexOf:

console.log(value.indexOf('ä')); 

Ma l'uscita con tutti i modelli è: -1

quindi credo che sia una specie di un problema con la codifica, ma come ho detto nella pagina delle dieresi si limitano a guardare bene .

Qualche idea? Sembra così semplice ...

MODIFICA: Anche se ho trovato la mia risposta, il problema non è stato risolto "alla radice" (la codifica). Questa è la mia pagina di codifica:

<meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> 

Il database ha: utf8_general_ci

sembra del tutto bene per me.

+1

Cosa codifica si fa a utilizzare nel database e quale codifica usi nella tua pagina web? – Marc

+0

E qual è la stringa ??? Registralo. I tuoi approcci funzionerebbero, ma come puoi vedere dal tuo indexOf, la tua stringa non contiene un "ä". – Bergi

+0

'" bäg ".replace (/ ä/g," ae "); // ==> "baeg" ', in modo da qualcosa è probabilmente fuori con la codifica –

risposta

21

O assicurarsi che la codifica del tuo script è specificato correttamente (in <script> tag o di intestazione di pagina/meta se è incorporato) o specifica simboli con \uNNNN sintassi questo risolverà sempre in modo univoco alcuni specifici codici Unicode.

Ad esempio:

str.replace(/\u00e4/g, "ae") 

sarà sempre sostituire una con AE, non importa quale sia la codifica è impostato per la tua pagina/script, anche se non è corretto.

Ecco i codici necessari per le lingue germaniche:

// Ü, ü  \u00dc, \u00fc 
// Ä, ä  \u00c4, \u00e4 
// Ö, ö  \u00d6, \u00f6 
// ß  \u00df 
+0

La ringrazio molto, questo funziona :-) Ho codifica UTF-8 nella pagina: che sembra del tutto a destra a me, quindi mi limito a lavorare con quello ... – SamiSalami

+0

Qui ci sono più dei codici: // U, u \t \t \ u00dc, \ u00fc // a, a \t \t \ u00c4, \ u00e4 // Ö, ö \t \t \ u00d6, \ u00f6 // ß \t \t \ u00df –

+0

Å per i paesi nordici: // Å, å: \ u00c5, \ u00e5 –

1

è necessario capire prima quali sono i codici dei caratteri sono che si sta cercando di sostituire. Ad esempio, a seconda della codifica dei caratteri, i caratteri potrebbero essere in 8859, UTF-8 o qualcos'altro. Potrebbero anche essere simboli di carattere, come "ä"

Invece di indovinare, stamparli.

E attenzione che i vostri dati in arrivo non possono utilizzare la stessa codifica del set/caratteri di caratteri in modo coerente - è necessario controllare sul dove i dati proviene.

Quindi guardiamo i dati in arrivo tramite stringa. charCodeAt

Controllare il codice carattere prima dello toLowerCase per assicurarsi che non cambi le cose su di te. Dovrai eseguire il debug passo dopo passo.

Infine, controllare le impostazioni di set di caratteri nel vostro editor per garantire che il vostro un digitato è quello che dovrebbe essere. Si consiglia di indicare tramite il valore UTF8 invece di digitare ä, ö ecc

+2

Non importa quello che si utilizza la codifica in pagina, in JS tutto è Unicode e un umlaut sarà ** ** sempre avere esattamente stesso codice. –

+0

Penso che il mio codifica del documento (il mio file nell'editor) non importa, perché il testo è in arrivo da un database, in modo che solo la codifica nel database e nei meta tag html dovrebbe essere importante o no? E la tua formattazione della funzione è piuttosto confusa, dovrebbe essere string.charCodeAt (0); (0 è la prima posizione), ma in realtà non ci ho pensato ed è stato un buon indizio, sfortunatamente non è stato d'aiuto - l'unicode giusto è stato restituito prima di toLowerCase e successivamente. – SamiSalami

6

Ecco una funzione che sostituisce i caratteri più comuni per la produzione di un Google SEO friendly url:

function deUmlaut(value){ 
    value = value.toLowerCase(); 
    value = value.replace(/ä/g, 'ae'); 
    value = value.replace(/ö/g, 'oe'); 
    value = value.replace(/ü/g, 'ue'); 
    value = value.replace(/ß/g, 'ss'); 
    value = value.replace(/ /g, '-'); 
    value = value.replace(/\./g, ''); 
    value = value.replace(/,/g, ''); 
    value = value.replace(/\(/g, ''); 
    value = value.replace(/\)/g, ''); 
    return value; 
}