多次转义 " 或 '

Escaping " or ' multiple times

所以我经常要通过servlets或者jsps来为网页生成内容。在那个过程中,我有时 运行 在使用字符串时尝试转义多层 " 或 ' 时遇到问题。 例如,我在这里创建一个带有弹出窗口的元素:

String pvPopup = "Y'en aura pas de facile!";
out += "<img class=\"clickable\" src=\"../images/question.png\"  onclick=\"alert(" + pvPopup + ");\" />";

我不能使用替代项 ',因为文本中充满了它们,因此它打乱了顺序。我无法再次使用简单的 " 来转义警报中的字符串,因为我已经在使用它了。

我试过使用三重反斜杠或 unicode \u0022 进行转义,但两者都会导致不同的问题,而且似乎无法正常工作。

这里有我缺少的简单解决方案吗?我应该怎么做?

我认为最好使用某种解析器然后连接这些值。

String str =" onclick=\"alert(" + pvPopup + ");\"";
Scanner s = new Scanner(str).useDelimiter("\|");
String[] result = s.next().split("\|");
System.out.println(result[0]);
System.out.println(result[1]);

结果:

alert(pvPopup);

从你想要发射的东西开始倒推:

<img class="clickable" src="../images/question.png"  
     onclick="alert('Y\'en aura pas de facile!');">

所以你想要这样的东西:

String pvPopup = "Y'en aura pas de facile!";

out += "<img class=\"clickable\" src=\"../images/question.png\"";
out += "     onclick=\"alert('" + jsQuote(pvPopup) + "');\">";

其中 jsQuote(String)"Y'en aura pas de facile!" 转换为 "Y\'en aura pas de facile!"

(您应该能够找到一个现有的实用方法来执行 JS 引用,尽管它可能会在第 3 方库中。)


话虽如此,最好使用 JSP 或其他一些模板方案来为 HTTP 响应生成 HTML 等。如果你这样做,那么你应该寻找一个 JSTL 标签库,它可以做上面(假设的)jsQuote 方法正在做的事情。