Как избежать апострофа или кавычек на JSP (используется JavaScript)

У меня есть пользовательская форма. Если пользователь вводит строку с ' или " как часть этого, у меня нет проблем. Форма отправляется и сохраняется в базе данных. Моя проблема заключается в том, когда я перезагружаю страницу (все записи могут быть изменены и загружены в список в JSP перед отображением). При загрузке страницы я получаю сообщение об ошибке:

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

Что мне нужно сделать, чтобы избежать этой строки для ее отображения на интерфейсе?

Вот код, который я использую в интерфейсе для чтения в данных и сохраняю его в объекте JavaScript. Я не совсем уверен, где мне нужно бежать. Поле, вызывающее проблему, - c.getComName:

communications[<%=i%>][1] = new CommObject('<%=c.getComId()%>', '<%=c.getComName()%>');

ОБНОВЛЕНО С ПОТОКОМ HTML:

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

Ответ 1

Используйте функцию 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'.

Ответ 2

Я предпочитаю избегать сценариев в середине моей страницы и должен использовать их (все чаще), чтобы избежать строк при использовании в JavaScript-коде. Я хотел язык выражения (EL) способ избежать строк. Я создал очень маленький пользовательский taglib, который я использую для этой цели:

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" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">

  <description>My Tag Library</description>
  <display-name>Tag Utils</display-name>
  <tlib-version>1.1</tlib-version>
  <short-name>myt</short-name>

  <function>
    <description>
        JavaScript Escape function
    </description>
    <name>escapeJS</name>
    <function-class>com.mycom.taglibs.Utilities</function-class>
    <function-signature>java.lang.String escapeJS(java.lang.String)</function-signature>
  </function>
</taglib>

И на странице JSP:

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

Ответ 3

fn: escapeXml не работает в JavaScript. Он заменяет "## amp 0039; все еще вызывая ошибку при выполнении JavaScript.

Исключено только экранирование в JavaScript:\

Функция Apache StringEscapeUtils.escapeJavaScript делает это для вас. Создание taglib для него значительно упрощает вопросы.

Ответ 4

Когда вы возвращаете HTML из класса CommObject, добавьте в "вместо" и перед именем (например, сообщение "Кэролайн" )

Например: return "\" "+ comName + "\" ";

Ответ 5

Вы можете использовать функцию escape-функции JSTL fn:escapeXml(), чтобы избавиться от аномалий, вызванных одинарными кавычками (`). Следующий пример демонстрирует разницу.

Например:

<c:set var="string1" value="This is abc first String."/>
<c:set var="string2" value="This is abc second String."/>

<p>With escapeXml() Function:</p>
<p>string (1): ${fn:escapeXml(string1)}</p>

<p>Without escapeXml() Function:</p>
<p>string (2): ${fn:escapeXml(string2)}</p>

РЕЗУЛЬТАТ

string (1): Это первая строка String.

string (2): Это строка abc second String.

Ответ 6

Это странно.

Как насчет:

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

Если это работает, вам просто нужно выяснить, как добавить\".

Ответ 7

Вы можете использовать основные теги JSP:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>      
var jsVar = "<c:out value='${stringVariable}' />";