2013-06-19 43 views
1

用戶可能輸入在輸入框中輸入一些特殊字符:如何處理網頁輸入框中的引號?

<input type="text" name="task_description" id="task_description" value="<?cs var:Query.task_description?>"> 

雙引號和例如單引號。我需要獲取他們的輸入文本,並將task_description插入到我的數據庫表中。

我的服務器上,我寫的用C++我的CGI和我的數據庫爲MySQL。

用戶的輸入將通過JSON傳輸到服務器。

的問題是在服務器端,當我想通過用戶輸入的字符串

JSON,我就不能得到正確的。例如:

如果用戶輸入:

你好 「」 你好

在服務器端,我得到這樣的JSON輸入字符串:

static string get_escape_string(const string& src) 
{ 
    static char escape_buffer[1024*1024]; 
    mysql_escape_string(escape_buffer, src.c_str(), src.length()); 
    string dst(escape_buffer, strlen(escape_buffer)); 
    return dst; 
} 

//here is how I get the user's input 
string remarks = get_escape_string(record[i]["remarks"].asString()); 

「記錄」是JSON數據,操作後我只能得到:你好

它在第一個雙重誇佔標記被截斷。

我試圖使用功能「越獄」在前端JavaScript代碼,而「逃」不能

代碼雙引號。

我該如何處理雙引號和單引號?

在此先感謝!

+0

你問在插入數據庫之前如何去除特殊字符? –

+0

您使用哪種服務器端技術? –

+0

我允許用戶輸入他們想要的任何東西,所以我不想剝離特殊字符,在我的服務器端,我使用C++編寫我的CGI,用戶的輸入將以JSON傳輸到服務器,而我的數據庫是mysql。問題是當我想用JSON獲取用戶輸入的字符串時,我無法得到正確的輸入。 – zenis

回答

1

我怎麼能應對雙和單引號?

與處理所有數據庫輸入相同的方式:使用參數化查詢。切勿使用字符串連接構建SQL字符串。 (Obligatory link to xkcd

如何你做到這一點,將取決於你所使用的服務器端技術,你還沒有上市。類似地,當將某些東西的文本輸出到HTML中的value屬性中時,您需要使用一個函數(可能在您的服務器端環境中提供)將該文本正確編碼爲HTML(因爲屬性值是HTML),這會將雙引號變成&quot;個實體和類似的。