我正在 SSRS 中使用一些 JavaScript 代码在报表的新窗口中打开链接。报告链接指向服务器上的文件位置。我在 Reporting Services 中使用的链接代码是:
="javascript:void(window.open('"+ "file:" & Replace(Fields!FilePath.Value,"\","/") + "','_blank'))"
当文件名是“正常”的名称时,此代码可以正常工作,例如:
\\myserver\images\Files\1969\1-000-002_SE 82ND AVE 1_1969.pdf
但是,当存在特殊字符(至少是#)时,我会收到一条错误消息。这就是发生的事情。文件名示例如下:
\\myserver\images\Files\1978\1-001-003_SE 82nd AVE #12 1_1978.pdf
在这种情况下,返回的 URL 是:
\\myserver\images\Files\1978\1-001-003_SE 82nd AVE
可以看出,URL 在第一个数字符号处被切断。如果我复制有问题的链接的快捷方式,这就是我得到的:
javascript:void(window.open('file://myserver/images/Files/1978/1-001-003_SE%2082nd%AVE%20#12%201_1978.pdf','_blank'))
JavaScript 似乎正确编码了文件路径,但 JavaScript 代码和 URL 之间的转换过程中有些内容丢失了。
我无法更改文件名,因此我需要想出一种使用特殊字符的方法。我尝试过使用 EncodeURI() 但无法弄清楚如何在 SSRS 中正确格式化它以与现有的 JavaScript 一起使用。
欢迎任何想法。
最佳答案
URL 将识别 HTML 字符编号。因此,在 JavaScript 之外,对您希望找到的每个特殊字符使用 SSRS 替换函数,将每个特殊字符替换为其相应的 HTML 数字代码。例如,井号是 %23;空格为 %20。
请注意,我有一些页面使用井号来分割 URL 参数,而这在这些情况下似乎不起作用。但是,它可能适合您的情况。要尝试此操作,请将您的函数更改为以下内容:
="javascript:void(window.open('"+ "file:" & Replace(Replace(Fields!FilePath.Value,"\","/"),"#","%23") + "','_blank'))"
如果这对您有用,您可以找到更多这些代码 here .
关于SSRS 中的 JavaScript 无法正确处理数字符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23121443/