[英]How to allow user to input escaped chars in Javascript
這里簡單一點。
我有一個HTML <textarea>
,我想讓用戶輸入轉義序列。 即:
Hello\nworld\x21
我希望我的腳本“解釋” \\n
和\\x21
得到:
Hello
world!
謝謝
編輯:這樣做的目的是允許用戶在html頁面中輸入熱敏打印機的代碼。 打印機需要特殊的字符。 我想取這個字符串,“解釋”特殊代碼並將其發送到打印機。 目前,打印機按原樣打印字符串。
我能想到的唯一方法是不使用
長替換行,而是使用
eval()
函數。
例如,您可以使用以下內容:
function useEscapes(s) { return eval('("' + s.replace(/([^\\\\]|^)(?=(\\\\\\\\)*["\\n])/g, '$1\\\\').replace(/\\n/g, 'n') + '")'); }
replace
是為了確保傳入
eval()
函數是安全的。
編輯9/28/2016:
有一種更好的方法不是安全風險。 因為字符串文字是有效的JSON,所以可以將其包裝在引號中並使用JSON.parse
。 您還可以在其中轉義引號,以便用戶不會出現無法解釋的語法錯誤。 如果攻擊者試圖將代碼放在字符串之外,則只會拋出語法錯誤。
function useEscapes(s) {
return JSON.parse('"' + s
.replace(/((^|[^\\])(\\\\)*)"/g, '$1\\\\"') // optional - prevents syntax errors
+ '"');
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.