You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JSP中转义单引号?Angular初始化赋值场景问题

解决JSP中Angular ng-init的单引号转义问题

这个问题太常见了——当后端返回的字符串带单引号时,直接嵌入JS代码会瞬间破坏语法结构,导致控制台报错。给你两种实用方案,从简单场景到通用处理都覆盖到:

方法1:手动转义单引号(适合仅需处理单引号的场景)

如果只是单引号的问题,可以用JSTL的fn:replace函数把字符串里的单引号替换为JS能识别的转义格式\'。注意JSP里的反斜杠需要额外转义(写成\\),不然会被JSP解析直接吃掉。

步骤:

  1. 先引入JSTL函数标签库:
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
  1. 修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:12:29