0

สวัสดี Mr.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 中显示转换后的 &apos,而不是特殊字符。

非常简单在这里我已经在 StackOverflow 中展示了这个 String(สวัสดี Mr.Java Sp'e c'i'a'l'' ') 他们保存在他们的数据库和节目中,并允许我更新这是我想要的。

4

1 回答 1

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 文档并显示时,您将看到“สวัสดี Mr.Java Sp'e c'i'a'l''”


看看发生了什么?您已经将 HTML 转义了您的 HTML 转义撇号!!


那么你真正需要做什么?

  1. 无需将撇号替换为'. 撇号在 HTML 文本中是合法的。

  2. 应该不需要添加 HTML 转义,以便您可以将文本存储在数据库中:

    • 任何现代数据库都允许您存储 Unicode 字符串而无需任何特殊编码。

    • 如果您试图防止数据库的 SQL 解析器被您存储的文本中的引号弄糊涂,那么您的做法是错误的。正确的方法是使用 a PreparedStatement,将参数占位符添加到查询中,并使用PreparedStatement.setXxx方法提供参数值。(execute或其他)将处理需要完成的任何 SQL 转义。

于 2013-06-04T14:53:37.617 回答