4 Stimmen

Javascript Benutzer-Eingabe gegen gewünschten Zeichensatz (Codierung) validieren

Das Szenario ist wie folgt:

Der Benutzer kopiert Text von einer Webseite, die die Zeichencodierung Win-1252 verwendet. Dieser Text wird dann an eine Datenbank gesendet, die ich mit einer Zeichencodierung von ISO-8859-1 steuere (dies ist eine Teilmenge von Win-1252). Gibt es einen Mechanismus innerhalb von Javascript, um den Benutzer darauf hinzuweisen, dass er "ungültige" Zeichen in das System einzufügen versucht? Vorzugsweise mit Markierung dieser Zeichen.

Die allgemeine Form dieses Problems ist, dass ein System A (sendendes System) einen Satz von Kodierungen definiert hat als AsubE und ein anderes System B (das empfangende System) einen Satz von Kodierungen definiert hat als BsubE. Wenn BsubE innerhalb des Universums von AsubE liegt, ist es kein Problem. Die Frage ist, was passiert, wenn BsubE keine Teilmenge von AsubE ist und wie wir die Eingabe des Benutzers validieren können.

3voto

pimvdb Punkte 146174

Da einige Zeichen im Subset nicht definiert sind, könnten Sie einen regulären Ausdruck verwenden, um diese Intervalle zu definieren:

function isNotAllowed(char) {
    return /\x00-\x1f|\x7f-\x9f/.test(char); // 00 bis 1f oder 7f bis 9f
}

Um auch Zeichen hervorzuheben, wird es komplizierter, aber diese Funktion könnte der Kern davon sein.

1voto

Anthony Mills Punkte 8560

Es gibt keine Funktion in JavaScript, um dies zu tun. Glücklicherweise handelt es sich bei Windows-1252 oder ISO-8859-1 um keine variable Breitenkodierung, so dass Sie etwas in z.B. .NET schreiben könnten oder etwas, das Zeichencodierungen versteht, um einen regulären Ausdruck zu testen.

Zum Beispiel könnten Sie in .NET ein Byte-Array mit 256 Bytes erstellen, eines für jedes Zeichen, und dann jede Kodierung verwenden, um den entsprechenden String zu erhalten. Finden Sie die Unterschiede in diesen Zeichenfolgen heraus, verschlüsseln Sie sie in einen regulären Ausdruck und fertig.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X