2016-05-31 2 views
1

Простой здесь.Как разрешить пользователю вводить экранированные символы в Javascript

У меня есть HTML <textarea>, в котором я хочу разрешить пользователю вводить escape-последовательность. То есть:

Hello\nworld\x21 

И я хочу, чтобы мой сценарий "интерпретировать" в \n и \x21 получить:

Hello 
world! 

Благодаря

EDIT: Целью этого является, чтобы позволить пользователю для ввода кода термопринтера на странице html. Принтеру нужны специальные символы. Я хочу взять эту строку, «интерпретировать» специальные коды и отправить их на принтер. В настоящее время принтер печатает строку как есть.

+1

[что вы пробовали] (http://whathaveyoutried.com) и какие у вас были проблемы в вашей попытке? – zzzzBov

+1

Выглядит так: http://stackoverflow.com/questions/1787322/htmlspecialchars-equivalent-in-javascript/4835406#4835406 Вам нужно сделать конвертер и разделить строку, я думаю. –

+0

также, каков ваш ожидаемый выход для обратных косых черт, используемых для не-экранов? например, что должно '' '' 'производить, или' '\' '? – zzzzBov

ответ

0

Единственный способ, которым я могу думать, не использовать длинный заменить линию с помощью функции eval(). Можно, например, использовать следующее:

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

replace, чтобы убедиться, что это безопасно передать в функцию eval().

EDIT 9/28/2016:

Там есть лучший способ, который не является риском для безопасности. Поскольку строковый литерал действителен JSON, его можно заключить в кавычки и использовать JSON.parse. Вы также можете избежать кавычек в нем, чтобы пользователи не получали необъяснимых синтаксических ошибок. Если злоумышленник пытается вывести код за пределы строки, он просто выдает синтаксическую ошибку.

function useEscapes(s) { 
    return JSON.parse('"' + s 
     .replace(/((^|[^\\])(\\\\)*)"/g, '$1\\\\"') // optional - prevents syntax errors 
     + '"'); 
} 
+1

Единственная «ошибка» - это возврат каретки во входную строку пользователя, функция возвращает ошибку Неожиданный токен ILLEGAL. – vIceBerg

+2

Удачи вам в '' '' 'в качестве входных данных, и moreso за то, что вы открыли свое приложение для пользователя, способного бессознательно выполнить произвольный JavaScript. – zzzzBov

+1

Скажите, что это надзор. Второе заменяет необязательно. – RamenChef