如何逃脱撇号或报价在JSP(由JavaScript使用)(How to escape apostro

2019-07-19 06:59发布

我有一个用户的形式。 如果在字符串中的用户类型'"作为它的一部分,我也没问题。在表单提交和正确保存到数据库中。我的问题是,当我重新加载页面(所有条目可以被修改,并装入。列表中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');

Answer 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'. 


Answer 2:

我倾向于避免在我的页面的中间小脚本,并有使用它们(经常越来越)在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);
    }
}

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)}


Answer 3:

FN:将escapeXml不能在JavaScript中使用。 它取代了“以#&0039; 在执行JavaScript后仍然导致错误。

只有逃避在JavaScript的方式是正确的:\”

在Apache的StringEscapeUtils.escapeJavaScript功能可以实现这个要求。 创建一个标签库为它大大simplyfies事项。



Answer 4:

另外,我们有从春天很不错的解决方案:

 <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <spring:message code="${propertyName}" javaScriptEscape="true"/> 

所以,从这个职位的问题问题可以通过这种方式来解决:

communications[<%=i%>][1] = new CommObject('<spring:message code="${c.comId}" javaScriptEscape="true"/>', '<spring:message code="${c.comName}" javaScriptEscape="true"/> <%=c.getComName()%>');



Answer 5:

当您从CommObject类返回HTML添加在\”,而不是“和名称(如卡罗琳的消息)

就像这样:回归 “\” “+ comName + ”\“”;



Answer 6:

您可以使用JSTL逃生功能fn:escapeXml()摆脱起因于单引号(')异常。 下面的示例演示的差异。

例如:

<c:set var="string1" value="This is abc's first String."/>
<c:set var="string2" value="This is abc's 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>

结果

串(1):这是ABC首字符串。

字符串(2):这是ABC的第二个字符串。



Answer 7:

真奇怪。

关于什么:

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

如果这样的作品,你只需要弄清楚如何添加\”。



Answer 8:

你可以使用JSP核心标签:

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


文章来源: How to escape apostrophe or quotes on a JSP (used by JavaScript)