สวัสดีMr.Java Sp'e c'i'a'l'''
我尝试使用下面的代码解析String但我无法做到 只是它显示错误的值。
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中它会显示转换后的& an in jsp,而不是Special 字符。
非常简单就在这里我在StackOverflow中展示了这个字符串(สวัสดีMr.Java Sp'e c'i'a'l''') 保存在他们的数据库和显示,并允许我更新这是我 想要的。
答案 0 :(得分:1)
行。那么让我们来看看你的代码做了什么:
// line 1
String s = "สวัสดี Mr.Java Sp'e c'i'a'l'' '";
我们有一个包含各种国际字符的字符串......以及一些"'"
个字符。
// line 2
s = s.replaceAll("'", "'");
假设这些字符真的是"'"
个字符,我们将用{/ 1}}替换所有带有XML / HTML字符实体的实例:
"'"
所以......
"สวัสดี Mr.Java Sp'e c'i'a'l'' '"
这将使用字符引用替换所有活动的HTML / XML字符。这包括您之前插入的&符号// line 3
s = StringEscapeUtils.escapeHtml(s);
。结果如下:
"&"
("&#xxxx;&#xxxx;&#xxxx;&#xxxx; Mr.Java Sp'e
c'i'a'l'' '"
数字字符引用对这些泰语(?)字符进行编码。)
当您将其嵌入HTML文档并显示它时,您将看到“สวัสดีMr.Java Sp& c& i& a& l& amp;& amp;& amp;者;“
看看发生了什么?你有HTML转义你的HTML转义叛逆者!!
那么你真的需要做什么?
不需要用&#xxxx;
替换撇号。撇号在HTML文本中是合法的。
应该不需要添加HTML转义,以便您可以将文本存储在数据库中:
任何现代数据库都允许您存储Unicode字符串而无需任何特殊编码。
如果您试图阻止数据库的SQL解析器被您正在存储的文本中的引号弄糊涂,那么您的操作方式是错误的。 right 执行此操作的方法是使用'
,向查询添加参数占位符,并使用PreparedStatement
方法提供参数值。 PreparedStatement.setXxx
(或其他)将处理需要执行的任何SQL转义。