将 Java 字符串中的多个反斜杠替换为 JSP 生成的 JSON 中的 HTML 实体



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

情况如下: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 是正斜杠的代码。 也许是,我不知道。 然后,您的正则表达式会查找反斜杠。 这有点令人困惑!

最新更新