gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:19:14 26 4
gpt4 key购买 nike

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

情况如下: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;
}

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

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

问候,ASP

最佳答案

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

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

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

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

关于java - 将 JSP 生成的 Json 的 Java 字符串中的多个反斜杠替换为 HTML 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11189523/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com