2013-06-04 43 views
0

สวัสดีMr.Java Sp'e c'i'a'l「」'的特殊字符在JAVA

我試着用下面的代碼來解析字符串,但我便無法使 簡單地把它顯示錯誤的值。

String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '""; 
s = s.replaceAll("'", "'"); 
//s = s.replaceAll("'", "''"); 
StringEscapeUtils.escapeHtml(s); 

我想從JSP獲取並保存在SQL Server數據庫中,並使用JSP和更新顯示。 但在JSP中的某些時候,它顯示了在jsp中轉換的&,因爲它代替了特殊的 字符。

非常簡單的是在這裏,我已經表明這個字符串(สวัสดีMr.Java Sp'e c'i'a'l「」「)中的StackOverflow他們 保存在自己的DB和節目,讓我這個更新是我想要的 。

+0

它是一個類型或者是你的字符串正是?因爲它不是一個有效的字符串,所以它有一個「獨立的,你必須刪除或逃避它 – Djon

+0

它只是例如顯示,TYPO,但在JSP的文本框中,這也將被允許作爲備註輸入 – sunleo

+0

可能是它與UTF格式有關。可能是你的數據庫沒有存儲/支持utf格式!! – iMBMT

回答

1

好的。所以,讓我們看看你的代碼做什麼:

// line 1 
String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '"; 

我們必須在它的各種國際字符......以及一些"'"字符的字符串。

// line 2 
s = s.replaceAll("'", "'"); 

假設這些都是真的"'"字符的字符,我們將使用XML/HTML字符實體給我們更換的"'"所有實例:

"สวัสดี Mr.Java Sp'e c'i'a'l'' '" 

等等...

// line 3 
s = StringEscapeUtils.escapeHtml(s); 

這將用字符引用替換任何活動的HTML/XML字符。這包括您先前插入的與號字符"&"。結果是這樣的:

"&#xxxx;&#xxxx;&#xxxx;&#xxxx; Mr.Java Sp'e 
c'i'a'l'' '" 

(?該&#xxxx;數字字符引用編碼這些泰國()字符)

當您嵌入在HTML文檔中,並顯示它,你會看到「สวัสดี先生Java Sp &'ec &'i &'a &'&'&'&';「


看看發生了什麼?你有HTML轉義你的HTML逃脫!


那麼你真的需要做什麼?

  1. 有沒有必要用'替換撇號。撇號在HTML文本中是合法的。

  2. 應該不需要添加HTML轉義,這樣就可以存儲在數據庫中的文字:

    • 任何現代數據庫將允許你存儲Unicode字符串沒有任何特殊的編碼。

    • 如果您試圖防止數據庫的SQL解析器在您存儲的文本中被引號引起混淆,那麼您的做法是錯誤的。 權利這樣做的方法是使用PreparedStatement,將參數佔位符添加到查詢,並使用PreparedStatement.setXxx方法來提供參數值。 execute(或其他)將負責任何需要完成的SQL轉義。

+0

感謝您的答覆。但是如果我這樣做不解析SQL服務器我無法插入',而在jsp文本框中顯示這個文件時,它變成了''''。 – sunleo

+2

至於SQL(即SQL注入)中的問題,正確使用'PreparedStatement'來覆蓋。如果你在SQL中遇到'''問題,那麼你大概不會正確地使用'PreparedStatement'。至於JSP中JSP文本框中的HTML問題(即XSS攻擊),請參閱http://stackoverflow.com/questions/4948532 /哪裏,應該-I-轉義HTML字符串S-JSP頁面,或-的servlet/4948856#4948856。總結:在保存到數據庫之前,請不要**轉義它們。斯蒂芬的回答表明,這並不完全合理。 – BalusC