经过几个小时的谷歌搜索和搜索,我终于来到了我需要问你的地方! :)
情况如下:Web 服务在 CDATA 中提供数据。这些数据被解析并放入我们的模型中。使用 Spring MVC,我们访问 JSP 文件中的模型来创建。重点来了...啧啧!别问,历史上!;-)
现在,不知何故,有人想到了一个光荣的想法,将多个(后)斜杠放入标题属性中。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
字符串是不可变的。 方法的名称"replaceAll"听起来好像您实际上是在修改字符串对象本身,但事实并非如此。 该方法仅返回操作的结果。 这就是为什么你从System.out.println获得正确的输出。 但是你犯了一个思想错误,认为仅仅因为调用是独立的, 不在 System.out.println 中,Java 代码应该自己理解这次您希望更改在字符串对象中是永久性的;)
尝试像这样重写方法的结尾:
System.out.println(string.replaceAll(regex,foreslash));
return string.replaceAll(regex,foreslash);
此外,"前斜杠"这个名字听起来好像 92 是正斜杠的代码。 也许是,我不知道。 然后,您的正则表达式会查找反斜杠。 这有点令人困惑!