代码之家  ›  专栏  ›  技术社区  ›  sergionni

javascript从JSP变量中删除斜杠

  •  4
  • sergionni  · 技术社区  · 14 年前

    有JSP变量 ${remoteFolder}

    它的价值在于 文件SRV\demo

    使用嵌入在此JSP中的jquery。

    jQuery解析 ${ReleFixFrase} 变量AS 文件SRVDEMO ,即删除一个斜线。

    如何保持这个变量的初始值?

    编辑 什么时候 ${ReleFixFrase} 内部使用 form 标签,它解决了。

    编辑2:

    JSP的JS部分,删除了斜线。

      <script>
            var oScript = document.createElement("script");
            oScript.type = "text/javascript";
            oScript.text = "var $j = jQuery.noConflict();";
            oScript.text+= "$j(document).ready(function(){";
            ...
           oScript.text+= "'script':'<%= request.getContextPath()   %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',";
            ...
            oScript.text+= "});"; 
            document.body.appendChild(oScript);        
        </script>
    

    编辑3:

    早期使用 ${ReleFixFrase} Var,斜杠没问题 <form enctype=“multipart/form data”method=“post”target=“uploadFrame”action=“<%=request.getContextPath()%>/uploadFile?”portletid=$portletid&remotefolder=$remotefolder“>

    4 回复  |  直到 14 年前
        1
  •  5
  •   BalusC    14 年前

    这里有两个问题。

    首先, \ 是JS字符串中的转义符。当你想代表 \ 在JS字符串中,需要对其进行双重转义: \\ . 最简单的方法是 JSTL fn:replace 为此。

    var jsVariable = "${fn:replace(javaVariable, '\\', '\\\\')}";
    

    其次,您希望将其作为URL参数发送。这个 \ 是URL参数中的非法字符。你需要对它进行URL编码。最简单的方法是使用javascript escape() 功能。

    var urlParameter = escape(jsVariable);
    

    总结,

    oScript.text+= "'script':'<%= request.getContextPath()   %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',";
    

    需要替换为

    oScript.text += "'script':"
        + "'${pageContext.request.contextPath}/uploadFile"
        + "?portletId=${portletId}"
        + "&remoteFolder=" + escape("${fn:replace(remoteFolder, '\\', '\\\\')}")
        + "',";
    

    或者,您可以使用 / 而不是 \ 作为文件路径分隔符。这在Windows中也非常有效。您不需要为了在字符串中使用而对它们进行转义,但是您仍然需要对其进行URL编码。

    oScript.text += "'script':"
        + "'${pageContext.request.contextPath}/uploadFile"
        + "?portletId=${portletId}"
        + "&remoteFolder=" + escape("${remoteFolder}")
        + "',";
    
        2
  •  2
  •   Tim Down    14 年前

    这是javascript而不是jquery。在使用额外的反斜杠创建JavaScript字符串文本时,需要转义任何要保留的反斜杠。

        3
  •  2
  •   Pointy    14 年前

    我发现,如果没有自己的EL函数库(其中包含一些关键函数),我就无法编写一个真正的Web应用程序。其中包括一个“jsquate”(或“escapejs”,这取决于我的心情)函数,它的目的是“保护”扩展的字符串,以便将它们放入javascript字符串常量中。它类似于 fn:escapeXml() 但它不是以HTML语法为目标,而是以JavaScript为目标。通常,它要做的是检查反斜杠、引号字符、换行符和其他常见控制字符,然后检查7位可打印范围之外的任何字符。有了这样的功能,您总是可以安全地执行如下操作:

    <script>
      // ...
      var s = 'A string ${yourLib:escapeJS(some.java.bean.property)} constant';
      // ...
    </script>
    

    我真的希望这样的事情能成为JSTL标准的一部分,但我没有希望。幸运的是,它真的很容易写。

        4
  •  1
  •   kb.    14 年前

    尝试设置 $remotefolder \\\\文件srv\\demo 因为javascripts将\解释为转义字符,因此需要\\打印\。