【问题标题】:Escape single quotes in a string [duplicate]转义字符串中的单引号[重复]
【发布时间】:2013-03-12 14:27:13
【问题描述】:

JSP:

<% final String data = "some test with ' single quotes"; %>
<script>
    var str = '<%= data %>';
<script>

结果是(JavaScript):

var str = 'some test with ' single quotes';

Uncaught SyntaxError: Unexpected identifier

如何将这个单引号替换为 \' 以避免 JavaScript 错误?

【问题讨论】:

  • 你使用任何网络框架吗?
  • 这样做时会出现什么错误?
  • @SamIam 我更新了问题
  • 您还需要对双引号、换行符、制表符和许多其他内容进行编码..
  • @JuanMendes 不,我不知道。我只需要转义单引号。这是没有任何换行符的内联字符串

标签: java javascript


【解决方案1】:

使用 Apache Commons Lang 包中的 escapeEcmaScript 方法:

将它找到的任何值转义到它们的 EcmaScript 字符串形式中。交易 正确使用引号和控制字符(制表符、反斜杠、cr、ff 等)。 所以标签变成了'\\''t'这两个字符。

Java 字符串和 EcmaScript 字符串之间的唯一区别是 在 EcmaScript 中,单引号和正斜杠 (/) 被转义。

例子:

input string: He didn't say, "Stop!"

output string: He didn\'t say, \"Stop!\"

【讨论】:

  • 绝对是矫枉过正,因为它还将任何非拉丁字母符号转换为其 unicode 序列 ("кириллица" -> "\\u043A\\u0438\\u0440\\u0438\\u043B\\u043B\\u0438\\u0446\\u0430")。
【解决方案2】:

请记住,您还需要对双引号、换行符、制表符和许多其他内容进行编码。一种方法是使用org.apache.commons.lang.StringEscapeUtils

public class JavaScriptEscapeTest {

    public static void main(String[] args) throws Exception {

        String str = FileUtils.readFileToString(new File("input.txt"));
        String results = StringEscapeUtils.escapeEcmaScript(str);
        System.out.println(results);

    }

}

输入.txt

这里有一些“文本” 我想为 JavaScript “转义”。 我将在这里尝试几个特殊字符:\"

输出

这里有一些\"Text\",\r\n我\'希望\"转义\"用于 JavaScript。\r\n我会在这里尝试几个特殊字符:\ \"

【讨论】:

  • 没有escapeJavaScript 方法了。
  • @VisoN 在 3.1 中重命名,直到 2.6
  • 为什么有人反对这个?如果您使用的是 org.apache.commons 2.6(我们一直在使用的版本),这是正确的。此外,这个问题已关闭链接到一个与我所说的完全相同的答案......
  • 我不知道谁投了你的票,但我个人认为至少应该考虑你的回答以实现向后兼容性。我不值得负分。
  • @VisioN 感谢您的补偿性投票:)
【解决方案3】:

您是否希望简单地对字符串进行双重转义,以便您实际上有一个 \ 后跟一个 '

<% final String data = "some name with \\' single quote"; %>

从您的 JavaScript 代码中,您可以使用 string replace 功能:

var str2 = str1.replace("'","\\'"); 

【讨论】:

  • 数据不是硬编码的。我从数据库中获取它并且必须替换单引号
  • 我认为这不是 OP 担心的硬编码字符串
猜你喜欢
  • 2019-03-17
  • 2016-04-19
  • 1970-01-01
  • 2012-05-28
  • 2012-05-30
  • 2019-11-25
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多