在java中转义javascript字符串

Posted

技术标签:

【中文标题】在java中转义javascript字符串【英文标题】:Escaping javascript string in java 【发布时间】:2012-08-24 07:27:05 【问题描述】:

我需要在java中把它变成一个字符串:

 <script type="text/javascript">document.write("<img src=\"UpArrow.png\" /> \"); </script>

有人可以帮忙吗?我一直在尝试,结果是这样的......

return "<script type=\"text/javascript\">document.write(\"<img src=\"UpArrow.png\" /> \"); </script>";

这不起作用,因为我需要在 UpArrow.png 之前和之后双重转义引号。因为它需要在 javascript 中而不是在 java 中进行转义。

.

.

2019 年更新:如果你正在看这个,上帝保佑你的灵魂。这是一个糟糕的代码,如果你试图以这种方式做事,那么你做错了(正如其他人向我建议的那样)。

正确的方法是使用 jquery 或现在存在的无数 DOM 修改框架之一,并将内容弹出/弹出 DOM 范围。

如果你这样做,你不应该看上面的代码或下面的解决方案,而应该去了解更多,因为这是制作意大利面条代码的途径。

【问题讨论】:

你必须转义\(它会变成\\\" 这看起来不是一个特别好的主意。我不想通过 java 维护在 html 页面中嵌入 javascript 函数的代码 不幸的是,这不是我的项目来决定的。我为使用 php / ajax 进行了一场很好的斗争,但在使用 JSP / Javascript / Xhtml 时被卡住了。 java/jsp 没什么问题,只是设计不好,恕我直言 好吧,在运行时需要包含基于数据库结果的图像也不是我的想法。在明天的最后期限之前,我没有太多其他方法可以处理这个问题。 【参考方案1】:

Apache commons 在 StringEscapeUtils 中有一个专门用于此目的的方法:escapeJavaScript 方法。

【讨论】:

这对于转义动态构建的 Javascript 字符串的一部分非常有用,但我不确定这是否正是 OP 正在寻找的。似乎意图是获取一段静态的 HTML/Javascript 文本并将其转义为 Java 字符串文字。 如果你想执行一个 javascript (of document.write here) 参数,你还必须转义简单的引号。这是通过这种方法完成的,您可以从静态文字初始化中调用它,这将比您自己转义它(稍微)更干净。我同意你的观点,应该尽可能避免使用这种 java+html+javascript 代码。 org.apache.commons.lang3.StringEscapeUtils 没有这个功能...有什么想法吗? 适用于大多数情况,但请注意 StringEscapeUtils 不能正确支持某些仅支持 ISO 8859-1 (Latin-1) 编码但不支持 \uXXXX unicode 的旧版 JavaScript 引擎转义语法。【参考方案2】:

看起来它已在 Apache Commons Lang 3 中移至 StringEscapeUtils 中的 ESCAPE_ECMASCRIPT。

https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/src-html/org/apache/commons/lang3/StringEscapeUtils.html#line.74

【讨论】:

【参考方案3】:

它似乎又移动了,现在它是“commons-text”的一部分并被命名为:

StringEscapeUtils.escapeEcmaScript

但它仍然存在。

【讨论】:

他们为什么一直在移动,我要一直重构

以上是关于在java中转义javascript字符串的主要内容,如果未能解决你的问题,请参考以下文章

杰克逊没有在 JSON 中转义引号

Java - 在正则表达式中转义元字符 [ 和 ] [重复]

在 Java 中转义 MySQL 字符串...没有准备好的语句

在Java .replaceAll方法中转义一长串元字符

在 JavaScript 中转义字符串

我可以在 JavaScript 中转义 HTML 特殊字符吗?