สวัสดีJava Sp'e c'i'a'l先生
我试图使用下面的代码解析字符串,但我无法
只是它显示了错误的值。
String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '"";
s = s.replaceAll("'", "'");
//s = s.replaceAll("'", "''");
StringEscapeUtils.escapeHtml(s);
我试图从JSP获取并保存在SQL Server DB中,并使用JSP和更新进行显示。
但是有时在JSP中,它会在jsp中显示转换后的“”,而不是在Special中。
字符
我在这里已经在StackOverflow中显示了这个String(String Mr.Java Sp'e c'i'a'l''')
保存在他们的数据库和演出中,并允许我更新这是我的
通缉。
最佳答案
好。因此,让我们看一下代码的作用:
// 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文档中并显示时,您将看到“สวัสดีMr.Java Sp'e c'i'a'l”'”
看看发生了什么事?您已将HTML转义为HTML转义撇号!!
那你真的需要做什么?
不需要用
'
替换撇号。在HTML文本中,撇号是合法的。无需添加HTML转义符即可将文本存储在数据库中:
任何现代数据库都将允许您存储Unicode字符串而无需任何特殊编码。
如果您试图防止数据库的SQL解析器被存储的文本中的引号引起混淆,那么您这样做的方式是错误的。正确的方法是使用
PreparedStatement
,向查询中添加参数占位符,并使用PreparedStatement.setXxx
方法提供参数值。 execute
(或其他任何内容)将处理需要完成的所有SQL转义。