如何在JSP中转义单引号?Angular初始化赋值场景问题
解决JSP中Angular ng-init的单引号转义问题
这个问题太常见了——当后端返回的字符串带单引号时,直接嵌入JS代码会瞬间破坏语法结构,导致控制台报错。给你两种实用方案,从简单场景到通用处理都覆盖到:
方法1:手动转义单引号(适合仅需处理单引号的场景)
如果只是单引号的问题,可以用JSTL的fn:replace函数把字符串里的单引号替换为JS能识别的转义格式\'。注意JSP里的反斜杠需要额外转义(写成\\),不然会被JSP解析直接吃掉。
步骤:
- 先引入JSTL函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
- 修改ng-init里的EL表达式:
<div ng-controller="HeaderController" ng-init="init( { firstName: '${fn:replace(customerInfo.firstName, "'", "\\'")}', lastName: '${fn:replace(customerInfo.lastName, "'", "\\'")}' })">
这样像d'souza就会被转成d\'souza,完美符合JS语法要求。
方法2:JSON序列化(推荐,通用解决方案)
手动转义只能处理单引号,如果字符串里还有双引号、反斜杠、换行符这类特殊字符,还是会出问题。更稳妥的方式是把整个Java对象序列化为JSON字符串,直接传给Angular。
后端(Java)处理:
用Jackson或者Gson这类JSON库把customerInfo转成JSON字符串,放到request属性里:
// 用Jackson的示例代码 import com.fasterxml.jackson.databind.ObjectMapper; // 在你的Servlet/Controller逻辑中 ObjectMapper objectMapper = new ObjectMapper(); String customerJson = objectMapper.writeValueAsString(customerInfo); request.setAttribute("customerJson", customerJson);
JSP中使用:
直接把JSON字符串作为对象传入init方法,不需要加引号,因为JSON本身就是合法的JS对象格式:
<div ng-controller="HeaderController" ng-init="init( ${customerJson} )">
这种方式会自动处理所有特殊字符,代码更简洁,扩展性也更强。
小提醒
你原来的代码里ng-init标签最后少了一个闭合的双引号和>,记得补上,不然也会导致页面解析错误哦。
内容的提问来源于stack exchange,提问作者I'm nidhin
相关产品推荐
相关产品推荐

