【问题标题】:Unterminated string constant未终止的字符串常量
【发布时间】:2011-04-27 23:48:43
【问题描述】:

我的描述包含一个撇号(')。如何逃脱它。

<a href='javascript:select("<%= pageBean.replace(list.getColumn(0), "'", "'") %>",
"<%= pageBean.replace(list.getColumn(1), "'", "'") %>");' title="<%=selRpt%>">
<span class='img-view'></span></a>

"&lt;%= pageBean.replace(list.getColumn(1), "'", "'") %&gt;" 是我的 JSP Scriptlet 中的描述部分,其中包含 apstrophe(')

我的 HTML 视图

    <a href='javascript:select("JWCCA5",
"Worker's Compensation Form -  California Form 5020(New)");' 
title="Select Report"><span class='img-view'></span></a>

【问题讨论】:

  • 你会认为框架会有某种方式对文本进行 HTML 转义。哎呀,即使 PHP 也能做到。
  • 顺便说一下,不要将 JavaScript 放入 href 参数中。使用onclick 事件
  • pageBean.replace() 方法的目的是什么?
  • 它将替换来自 DB 列的值

标签: java javascript html jsp


【解决方案1】:

使用\'

在HTML标签内,需要把字符串转成HTML实体,所以引号变成&amp;#039;

在纯 JavaScript 中,您还可以使用 \' 转义引号

【讨论】:

  • &amp;quot; 是这里的方式,HTML 不允许反斜杠转义。 @John,将“Worker's”替换为“Worker”。
  • @John 你没有指定你正在使用的语言,但它几乎可以肯定有某种addslashes 函数可以添加反斜杠,或者htmlentities 可以将所有特殊字符转换为他们的实体等价物。
  • @Andy 是正确的,我忽略了这是在 HTML 代码中,因此您需要在您的语言/框架中查找实体函数
【解决方案2】:

从 HTML 中调用一个函数,并将您的 JavaScript 放入该函数中。它会解决你的问题,但我认为无论如何它是更好的做法。

【讨论】:

    【解决方案3】:

    通常 \' 应该可以工作,但有时您似乎需要使用 ''(双撇号)。

    试试这个:

    <%= pageBean.replace(list.getColumn(0), "'", "\'" %>
    

    或:

    <%= pageBean.replace(list.getColumn(0), "'", "''"
    

    其中一个应该可以工作(根据我的经验)。

    对于 HTML 标记中的属性,我会使用 "(引号)而不是 '(撇号)。

    【讨论】:

    • 这取决于你的字符串来自哪里。我假设“工人补偿表”最终将被放置在某些属性中(至少应该,我不会对其进行硬编码),在这种情况下,您应该在属性文件中对其进行转义。否则,只需在编码时将其转义即可。
    【解决方案4】:

    也许您可以改用 unicode 字符代码? (\u0027)

    【讨论】:

    • 我希望您可以在任何有撇号但不打算用作分隔符的地方使用它。
    【解决方案5】:

    对于保留的 HTML 字符,您应该使用 HTML entities。然后将撇号表示为&amp;#39;

    <a href='javascript:select(
      "<%= pageBean.replace(list.getColumn(0), "'", "&#39;") %>", 
      "<%= pageBean.replace(list.getColumn(1), "'", "&#39;") %>");' title="<%=selRpt%>"> 
    <span class='img-view'></span></a>
    

    【讨论】:

      【解决方案6】:

      您必须在呈现之前将' 替换为#39;
      你可以在
      - 来自哪里的属性文件
      - 在 ASP 中的代码中

      顺便说一句,你在这行有什么尝试?

      "<%= pageBean.replace(list.getColumn(1), "'", "'") %>" 
      

      也许

      "<%= pageBean.replace(list.getColumn(1), "'", "&#39;") %>" 
      

      应该做的工作。

      【讨论】:

        【解决方案7】:

        普通的 JSP 开发人员会 abandon 老式 scriptlets 并改用 JSTL c:outfn:escapeXml。两者都将predefined XML entities 转义为'&amp;#39; 等等。

        这是fn:escapeXml 的示例:

        <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
        ...
        <a href="javascript:select('${fn:escapeXml(list.columns[0])}',
            '${fn:escapeXml(list.columns[1])}');" title="${title}">
        

        您可能只需将模型更改为更完整的 Javabean。

        【讨论】:

          猜你喜欢
          • 2011-07-24
          • 2018-09-16
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多