簡體   English   中英

在JavaScript中轉義字符?

[英]Escape characters in JavaScript?

我正在創建這樣的文件名

var name = $('#top-line').val();
var fname = random+'-'+name+'-something';

fname是文件名。 我不知道用戶可能會在#top-line中輸入什么內容,如何確定字符的安全性來逃避這些字符。 我用$top line = somethin "else"嘗試了一下,事情變得一團糟。

從我讀到的評論中,我了解到

escape("Need tips? Visit W3Schools!") will produce
Need%20tips%3F%20Visit%20W3Schools%21 

我的疑問是文件是否將另存為

Need%20tips%3F%20Visit%20W3Schools%21

如果有人寫轉義符(/需要提示?訪問W3Schools!”)

在服務器上編輯我正在保存文件

$name = uniqid('somevalue',true);
$file = 'usermemes/' . $name . '.jpeg';

在用戶計算機上,它們具有用戶提供的名稱。

您要在服務器上執行此操作 原因如下:即使您的JavaScript很小,也請記住,從理論上講,任何人都可以查看和修改您的腳本。 您可以編寫一個很棒的例程來檢查不良字符,確保用戶沒有進行任何“注入”操作,並將輸入內容轉換為服務器操作系統的良好文件名,但是如果有人真的有動力,他們可以下載本地文件。復制頁面,編輯腳本並根據需要觸發對服務器的惡意請求。

在客戶端進行一些基本的轉義是合理的(例如encodeUri-有關詳細信息,請參見此答案 ),但是您需要在服務器上進行實際工作。 不要僅僅接受用戶輸入,將其輸入文件名字符串,然后保存在服務器上。 它可以很簡單,例如一組str_replace調用或一個檢查允許字符的正則表達式。 您只想確保在用戶看不見的地方進行操作。

編輯 :如果您只是在本地使用用戶輸入的名稱,那么我將使用encodeURIComponent並按照Prabhu的建議使用正則表達式刪除單引號和雙引號。 (但是為什么不將文件以唯一的名稱保存在服務器上,然后讓用戶下載呢?

用空字符串啟動“名稱”變量

var name= "";
name="Need tips? Visit W3Schools!";

並且javascript會將“一切”作為字符串,無論它是轉義符還是其他內容。 甚至

var name= "";
name="\Need tips? Visit W3Schools!\";

要么

var name= "";
name="Need\\ tips? Vis\\it W3\\School\\s!";

唯一的事情是您需要注意雙引號,以便可以將其刪除。 所以完全像這樣

var name= "";
var name = $('#top-line').val();
name.replace(/['"]+/g, '');

或通過使用此邏輯來提醒用戶不要輸入雙引號

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM