2016-05-31 9 views
1

Ein einfacher hier.Wie Benutzer es erlauben, escaped Zeichen in Javascript

Ich habe ein HTML <textarea> in dem ich dem Benutzer die Escape-Sequenz eingeben möchten. Dh:

Hello\nworld\x21 

Und ich will mein Skript zu "interpretieren" die \n und die \x21 erhalten:

Hello 
world! 

Dank

EDIT: Der Zweck ist, dem Benutzer zu ermöglichen Geben Sie den Thermodruckercode in eine HTML-Seite ein. Der Drucker benötigt spezielle Zeichen. Ich möchte diese Zeichenfolge nehmen, die speziellen Codes "interpretieren" und an den Drucker senden. Derzeit druckt der Drucker die Zeichenfolge wie sie ist.

+1

[Was haben Sie versucht] (http://whathaveyoutried.com) und welche Probleme hatten Sie bei Ihrem Versuch? – zzzzBov

+1

Sieht ähnlich aus: http://StackOverflow.com/Questions/1787322/htmlSpecialChars-Equivalent-In-Javascript/4835406#4835406 Sie müssen einen Konverter machen und die Zeichenfolge teilen, denke ich. –

+0

auch, was ist Ihre erwartete Ausgabe für Backslashes für Nicht-Escapes verwendet? zum Beispiel was soll '' 'produzieren, oder' '' ''? – zzzzBov

Antwort

0

Der einzige Weg, ich daran denken kann keine lange ersetzen Linie ist mit der eval() Funktion nicht verwendet. Sie könnten zum Beispiel, verwenden Sie die folgenden Schritte aus:

function useEscapes(s) { 
    return eval('("' + s.replace(/([^\\]|^)(?=(\\\\)*["\n])/g, '$1\\').replace(/\n/g, 'n') + '")'); 
} 

Die replace sicher zu machen, ist es sicher in die eval() Funktion zu übergeben.

EDIT 2016.09.28:

Es gibt einen besseren Weg, die kein Sicherheitsrisiko ist. Da ein Zeichenfolgenliteral ein gültiger JSON ist, können Sie es in Anführungszeichen setzen und JSON.parse verwenden. Sie können auch Anführungszeichen darin entfernen, so dass Benutzer keine unerklärlichen Syntaxfehler bekommen. Wenn ein Angreifer versucht, Code außerhalb der Zeichenfolge zu platzieren, wird nur ein Syntaxfehler ausgelöst.

+1

Der einzige "Fehler" ist, wenn ein Wagenrücklauf in der Eingabezeichenfolge des Benutzers vorhanden ist, die Funktion einen unerwarteten ILLEGAL-Token-Fehler zurückgibt. – vIceBerg

+2

Viel Glück mit ''' '' als Eingabe, und auch, weil Sie Ihre App für einen Benutzer geöffnet haben, der in der Lage ist, willkürlich JavaScript auszuführen. – zzzzBov

+1

Sagen Sie, es ist ein Versehen. Zweites Ersetzen optional. – RamenChef