สวัสดี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转义。

09-28 11:26
查看更多