Javascript window.prompt变量包含反斜杠

问题描述:

我有一个超链接页面(自然地)从SQL表构建,但一些超链接实际上是网络资源(即\ server \ path)。对于那些我设置了jQuery语句来找到它们并用<a onclick='window.prompt...>替换那些<a href>标签,以便网络位置将在提示的文本框中,然后用户可以将其复制并粘贴到Windows资源管理器中。问题是,所有反斜杠都被删除。我知道你通常必须使用双反斜杠将它们转义出来,我没有手动放置路径,它们来自SQL表格,我使用变量将它们放入提示中。任何人都可以告诉我们是否有解决方案?Javascript window.prompt变量包含反斜杠

else if (($link.length > 0) && ($link.substring(0, 4) != "http")) { 
    $('.linktext', $this.closest('tr')).after("<span><a href='#link' onclick='window.prompt(\"This resource is located on a network drive and is not accessible via the web browser. Please copy the link and paste into Windows Explorer.\",\""+$link+"\");'>Text</a></span>"); 
} 

提示工作,但文本区域看起来就像这\serverfolder1folder2file.ext

我只是想到了一个简单的解决方案,它可以在从SQL中加载后“转义”URL值。这样我可以有选择地针对什么逃离,并保留正常的http URL,因为它们是:

else if (($link.length > 0) && ($link.substring(0, 4) != "http")) { 
      $linkescaped = $link.replace(/\\/g, "\\\\"); 
      $('.filter', $this.closest('tr')).after("<span><a href='#link' onclick='window.prompt(\"This resource is located on a network drive and is not accessible via the web browser. Please copy the link and paste into Windows Explorer.\",\""+$linkescaped+"\");'></a></span>"); 
     } 

使用两个反斜杠,而不是一个:\\server\\path

的JavaScript字符串中的反斜线/正则表达式有被转义字符的特殊含义:

var stringWithNewLine = "This 
doesn't work"; //Error 

var stringWithNewLine = "This\ndoes work"; //Escaped new-line feed. 
+0

这并不完全回答我的问题。我意识到我需要有两个反斜杠,但问题是如何让它们成为从SQL表传递的字符串。我想出了一个解决方案,但感谢你的回应。 – kramden88

+0

如果您的解决方案与我的答案完全不同,请将其作为新回复发布并接受。 –

mysql_real_escape_string()是您的解决方案。

echo mysql_real_escape_string("hello\world"); 

输出

hello\\world 

所以只要你传回给客户端之前逃脱你的服务器值。

+0

假设他使用php ...和mysql ... – James