2012-08-05 13 views
24

Ich bin auf der Suche nach Weg in JavaScript, um nicht ASCII Zeichen in einer Zeichenfolge in ihre nächste Entsprechung, ähnlich wie die konvertieren PHPiconv Funktion funktioniert. Wenn beispielsweise die Eingabezeichenfolge Rånades på Skyttis i Ö-vik lautet, sollte sie in Ranades pa skyttis i o-vik konvertiert werden. Ich habe mir phpjs angesehen, aber iconv ist nicht enthalten.Konvertieren von Nicht-ASCII-Zeichen (Umlaute, Akzente ...) in ihre nächste ASCII-Entsprechung (Slug-Erstellung)

Ist es möglich, eine solche Umwandlung in JavaScript, wenn ja, wie durchführen?

+0

Verwandte (aber keine wirkliche Lösung Decke): [entfernen Umlaute oder specialchars in Javascript string] (http://stackoverflow.com/q/4804885) –

+0

Dieser * kann * nativ nicht in JavaScript möglich sein, ohne große Ersatztabellen zu verwalten (zumindest habe ich noch nie eine Methode dafür gesehen). Es gibt keine Möglichkeit, die Daten an einen Server zu senden und dort iconv zu verwenden? –

+1

Ich habe einmal eine Funktion erstellt, dies zu tun. Siehe http://userscripts.org/scripts/review/112070, Strg + F "' var RW759_normalize_accents' ". Es wird verwendet, um Zeichen für die Suche zu normalisieren. Ich habe die Zeichen mit einem für den jeweiligen Zweck erstellten Werkzeug manuell ausgewählt. Basierend auf [diesem Q & A] (http://stackoverflow.com/questions/227950/programatic-accent-reduction-in-javascript-aka-text-normalization-or-unaccentin) –

Antwort

15

Der einfachste Weg, die ich gefunden habe:

var str = "Rånades på Skyttis i Ö-vik"; 
var combining = /[\u0300-\u036F]/g; 

console.log(str.normalize('NFKD').replace(combining, '')); 
+2

[ECMAScript 6] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize). Bis heute wird es nur von den neuesten Chrome- und Firefox-Alphas unterstützt. Vielversprechend. –

+0

Ich habe diese Methode in NodeJS verwendet. Vielleicht gibt es ein Unicode-Normalisierungsmodul für Clients, wie [unorm] (https://github.com/walling/unorm) – Rez

+0

Node.js hat sowieso iconv-Ports. –

3

Es ist, weil ist ein natives kompiliertes UNIX-Dienstprogramm hinter den meisten i18n Character Map-Konvertierungsfunktionen.

Sie werden es nicht in javascript finden, wenn Sie einige Browser-Komponente zugreifen.

Encoding ist eine Eigenschaft des Dokuments so dass die meisten JavaScript-Implementierung es nur einfach entlassen.

Sie erhalten eine reine js Bibliothek für tonlosen Saiten benötigen. Es wäre am besten, wenn Sie einen für die spezifische Sprache haben, die Sie benötigen.

Der einfachste Weg ist, über einige Tabellen übersetzen oder sogar regex ersetzt.

wie hier: http://lehelk.com/2011/05/06/script-to-remove-diacritics/

Prüfung dieses Thema zu: Replacing diacritics in Javascript

+1

Ich habe gerade festgestellt, dass das Ersetzen von diakritischen Zeichen durch ein einzelnes ASCII-Zeichen nicht ideal ist. Zum Beispiel sollte "ü" in "ue" konvertiert werden und nicht nur "u", siehe http: //webmasters.stackexchange.com/questions/33032/how-to-handle-urls-mit-diakritischen Zeichen. Es scheint, dass selbst 'iconv' nicht ir tut (' php -r 'setLocale (LC_ALL, "de_DE"); echo iconv ("UTF-8", "ASCII // TRANSLIT", "ü");' // -> u) ', daher denke ich, dass ich selbst Übersetzungstabellen erstellen werde (basierend auf' iconv' und manuell angepasst) und diese für 'JavaCript' und' PHP' verwende. – Max

+0

Gemäß diesem [iconv user comment] (http://nl3.php.net/manual/en/function.iconv.php#105507) wird iconv 'ü' nach' ue' konvertieren, wenn das Gebietsschema auf Deutsch eingestellt ist . – icc97