如何在JSP上转义撇号或引号(由JavaScript使用)

2022-09-01 05:45:41

我有一个用户表单。如果用户输入带有或作为其一部分的字符串,我没有问题。表单将提交并正确保存到数据库中。我的问题是当我重新加载页面时(所有条目都可以修改,并在显示之前加载到JSP中的列表中)。加载页面时,我收到一个错误,说:'"

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

我需要做些什么来转义此字符串以将其显示在前端?

以下是我在前端使用的代码,用于读取数据并将其存储在JavaScript对象中。我不完全确定我需要逃到哪里。导致问题的字段是 c.getComName:

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

使用生成的 HTML 进行了更新:

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

答案 1

我更喜欢在页面中间避免使用脚本,并且在JavaScript代码中使用时必须使用它们(越来越频繁地)来转义字符串。我想要一种表达式语言(EL)来转义字符串的方法。我创建了一个非常小的自定义taglib,我用它来达到这个目的:

实用程序.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)}

答案 2

使用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'.