2013-06-04 39 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