0

经过数小时的谷歌搜索和搜索,我终于来到了我需要问你的地方!:)

情况如下: Web 服务在 CDATA 中提供数据。这些数据被解析并放入我们的模型中。使用 Spring MVC,我们访问 JSP 文件中的模型以创建....重点来了... JSON!别问,历史!;-)

现在,不知何故有人想到了将多个(反)斜杠放入标题属性的绝妙想法。getTitle() 方法返回字符串“/// Glasvegas \\”。如果我们对 JSON(在 JSP 中创建)执行 JavaSCript eval() 以获取 JavaScript Json 对象,这当然是行不通的。它只是将反斜杠解释为注释,使 Json 无效。我尝试使用 apache.common 和 springframework 中的 escapeHtml() 方法,但它们都只是在正确编码所有其他特殊字符时忽略了反斜杠。

然后我尝试编写自己的方法:

public static String escapeHTML(String string) {         
    String foreslash="\";
    String regex="\\\\";
    System.out.println(string.replaceAll(regex,foreslash));
    string.replaceAll(regex,foreslash);
    return string;
}

在控制台输出中,字符串被正确替换,但如果在返回时中断并在调试器中检查变量“字符串”,它仍然是“/// Glasvegas \\”。在生成的 JSP 中也是如此。

所以,我有点迷失在这里。

问候, ASP

4

1 回答 1

1

字符串是不可变的。方法“replaceAll”的名称听起来好像您实际上是在修改字符串对象本身,但实际上并非如此。该方法只返回操作的结果。这就是您从 System.out.println 获得正确输出的原因。但是后来你犯了一个错误的想法,认为仅仅因为调用是独立的,而不是在 System.out.println 内部,java 代码应该自己理解这次你希望更改在字符串对象中是永久的;)

尝试像这样重写方法的结尾:

System.out.println(string.replaceAll(regex,foreslash));
return string.replaceAll(regex,foreslash);

此外,流行的名称“前斜杠”听起来好像 92 是正斜杠的代码。也许是,我不知道。然后,您的正则表达式会查找反斜杠。这有点令人困惑!

于 2012-06-25T12:46:15.410 回答