Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript从JSP变量中删除斜杠_Javascript_Jsp_Variables_Escaping_Slash - Fatal编程技术网

JavaScript从JSP变量中删除斜杠

JavaScript从JSP变量中删除斜杠,javascript,jsp,variables,escaping,slash,Javascript,Jsp,Variables,Escaping,Slash,让JSP变量${remoteFolder} 它的值是\\file srv\demo 使用此JSP中嵌入的jQuery jQuery将${remoteFolder}变量解析为\file srvdemo,即删除一个斜杠 如何保持该var的初始值 已编辑:当${remoteFolder}在表单标记中使用时,表示它已解析为OK edited2: JS是JSP的一部分,斜杠被去掉 <script> var oScript = document.createElement("

让JSP变量
${remoteFolder}

它的值是\\file srv\demo

使用此JSP中嵌入的jQuery

jQuery将
${remoteFolder}
变量解析为\file srvdemo,即删除一个斜杠

如何保持该var的初始值

已编辑:当
${remoteFolder}
表单
标记中使用时,表示它已解析为OK

edited2:

JS是JSP的一部分,斜杠被去掉

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

var oScript=document.createElement(“脚本”);
oScript.type=“text/javascript”;
oScript.text=“var$j=jQuery.noConflict();”;
text+=“$j(document).ready(function(){”;
...
text+=“'script':'/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',”;
...
oScript.text+=“});”;
文件.正文.附件(oScript);
edited3:

早期使用
${remoteFolder}
var时,使用斜杠就可以了
尝试将
$remoteFolder
设置为\\\\file srv\\demo,因为javascripts将\解释为转义字符,因此需要\\打印\。

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

这里有两个问题

首先,
\
是JS字符串中的转义字符。当您想在JS字符串中表示一个
\
时,需要对其进行双重转义:
\
。最简单的方法就是使用它

var jsVariable = "${fn:replace(javaVariable, '\\', '\\\\')}";
其次,您希望将其作为URL参数发送。
\
是URL参数中的非法字符。您需要对其进行URL编码。最简单的方法是使用Javascript的
escape()
函数来实现这一点

var urlParameter = escape(jsVariable);
总结而言

oScript.text+= "'script':'<%= request.getContextPath()   %>/uploadFile?portletId=${portletId}&remoteFolder=${remoteFolder}',";
或者,您可以使用
/
而不是
\
作为文件路径分隔符。这在Windows中也非常有效。您不需要转义它们以便在字符串中使用,但是仍然需要对其进行URL编码

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

我发现如果没有自己的EL函数库和一些关键函数,我就无法编写一个严肃的web应用程序。其中有一个“jsQuote”(或“escapeJS”,具体取决于我的心情)函数,其目的是“保护”扩展字符串,以便将它们放入Javascript字符串常量中。它类似于
fn:escapeXml()
,但不是针对HTML语法,而是针对Javascript。通常,它要做的是检查反斜杠、引号字符、换行符和其他常用控制字符,然后检查7位可打印范围之外的任何字符。使用此功能,您始终可以安全地执行以下操作:

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

// ...
var s='字符串${yourLib:escapeJS(some.java.bean.property)}常量';
// ...

我真的希望这样的东西能成为JSTL标准的一部分,但我不抱希望。幸运的是,它真的很容易写。

奇怪,所以去掉了一个“\`out.yes,\\”,它是从后端剥离出来的,以tah的形式解决了问题。但是在jQuery ready函数中,它在action属性中straped了slashinside表单标记,该变量包含所有斜杠ok,奇怪..你能发布你的JSP生成的相关JavaScript吗?请看“edited2”部分,有一段代码,斜杠意外地被剥离了-这是“uploadify”插件的jQuery部分,我不清楚。我指的是提供给浏览器的页面HTML源代码的相关片段,而不是JSP。您可以使用base 64,但需要为此编写/查找解码函数(不是每个浏览器都有内置的base 64解码函数)。您只需要用一个额外的反斜杠来转义Java字符串中的每个反斜杠。我想问的是,如果在浏览器中使用“查看源代码”,您会看到什么,这样我们就可以确定这是反斜杠转义问题。问题是,仅仅替换反斜杠并不一定足够。如果字符串中有双引号字符怎么办?还是双字节Unicode字符?在这种情况下,它是一个文件名,所以可能可以安全地假设一两个。BalusC,谢谢你的澄清。我将尝试这种方式。最初我尝试转义,但当我在记事本中检查此字符串时,/\f给了我一个看起来像正方形的符号。考虑到web开发人员经常遇到这种情况,这是个好主意
<script>
  // ...
  var s = 'A string ${yourLib:escapeJS(some.java.bean.property)} constant';
  // ...
</script>