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

Car*_*ine 34 javascript java forms jsp escaping

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

missing ) after argument list 'Caroline's message', \n
Run Code Online (Sandbox Code Playgroud)

我需要做什么来逃避这个字符串以便在前端显示它?

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

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

使用HTML生成更新:

communications[0][1] = new CommObject('101', 'Caroline's Message');
Run Code Online (Sandbox Code Playgroud)

RHS*_*ger 47

我更喜欢避免在我的页面中间使用scriptlet,并且在JavaScript代码中使用时不得不使用它们(越来越频繁)来转义字符串.我想要一种表达式语言(EL)方式来逃避字符串.我创建了一个非常小的自定义标记库,我将其用于此目的:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

并且,在JSP页面中:

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

  • 谢谢,这是一个很好的建议:)我只想补充一点,你不需要Utilities.java类.您可以使用StringEscapeUtils直接构造taglib,如下所示:<function-class> org.apache.commons.lang.StringEscapeUtils </ function-class> <function-signature> java.lang.String escapeJavaScript(java.lang.String)< /功能签名> (11认同)

Kev*_*son 23

使用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'.
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这已经变为`StringEscapeUtils.escapeEcmaScript(String)`in commons lang 3.x + (11认同)