Como escaping apóstrofo ou aspas em um JSP (usado pelo JavaScript)

Eu tenho um formulário de usuário. Se o usuário digita uma string com ' ou " como parte dela, não tenho problema.O formulário é enviado e salvo corretamente no database.Meu problema é quando eu recarrego a página (todas as inputs podem ser modificadas e são carregadas em um arquivo). lista na JSP antes de ser exibido) Ao carregar a página eu recebo um erro dizendo:

 missing ) after argument list 'Caroline's message', \n 

O que eu preciso fazer para escaping dessa string para exibi-lo no frontend?

Aqui está o código que estou usando no frontend para ler os dados e armazená-los em um object JavaScript. Não tenho certeza de onde preciso fugir. O campo que causa o problema é c.getComName:

 communications[][1] = new CommObject('', ''); 

ATUALIZADO COM HTML GERADO:

 communications[0][1] = new CommObject('101', 'Caroline's Message'); 

Use a function Apache StringEscapeUtils.escapeJavaScript .

 Escapes the characters in a String using JavaScript String rules. Escapes any values it finds into their JavaScript String form. Deals correctly with quotes and control-chars (tab, backslash, cr, ff, etc.) So a tab becomes the characters '\\' and 't'. 

Eu prefiro evitar os scriptlets no meio da minha página e ter que usá-los (cada vez mais frequentemente) para escaping de strings quando usado em código JavaScript. Eu queria uma maneira Expression Language (EL) de escaping das cordas. Eu criei um taglib personalizado muito pequeno que eu uso apenas para esse propósito:

Utilities.java:

 package com.mycom.taglibs; import org.apache.commons.lang.StringEscapeUtils; public class Utilities { public static String escapeJS(String value) { return StringEscapeUtils.escapeJavaScript(value); } } 

mytaglib.tld:

 < ?xml version="1.0" encoding="UTF-8" ?>  My Tag Library Tag Utils 1.1 myt   JavaScript Escape function  escapeJS com.mycom.taglibs.Utilities java.lang.String escapeJS(java.lang.String)   

E na página JSP:

 < %@ taglib prefix="myt" uri="/WEB-INF/mytaglib.tld" %> The escaped string is: ${myt:escapeJS(variableHoldingTheString)} 

fn: escapeXml não funciona em JavaScript. Substitui ‘por # & 0039; ainda causando um erro quando o JavaScript é executado.

Apenas escaping da maneira JavaScript está correto:

A function Apache StringEscapeUtils.escapeJavaScript faz isso por você. Criar um taglib para ele simplesmente simplifica as coisas.

Também temos uma solução muito boa da spring:

 < %@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>  

Quando você retornar o HTML da class CommObject adicione no \ “em vez do” e antes do nome (por exemplo, a mensagem de Caroline)

Assim: return “\” “+ comName +” \ “”;

Você pode usar a function de escape JSTL fn:escapeXml() para se livrar de anomalias causadas por aspas simples (`). O exemplo a seguir demonstra a diferença.

Por exemplo:

   

With escapeXml() Function:

string (1): ${fn:escapeXml(string1)}

Without escapeXml() Function:

string (2): ${fn:escapeXml(string2)}

RESULTADO

string (1): esta é a primeira String de abc.

string (2): Esta é a segunda String de abc.

Isso é estranho.

Sobre o quê:

 '< %=c.getComName().replaceAll("\\'","\\\\'")%>' 

Se isso funcionar, você só precisa descobrir como adicionar o \ “.

Você pode usar as tags principais do JSP:

 < %@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> var jsVar = "";