传递url时保留原始反斜杠的问题

problems retaining original backslashes when passing url

本文关键字:问题 原始 url 保留 传递      更新时间:2023-09-26

我有一个应用程序,它解析字符串并通过jQuery将它们传递到弹出窗口。我传递的一些字符串包含一个用于web地址或内部C:驱动器位置的字段。当我把绳子传给窗户时,windows路径中的反斜杠("''")正在被删除(当然,使用正斜杠的网址没有问题。我正试图将这些字符串作为链接传递,这样用户就可以点击链接然后离开。显然,如果反斜杠被删除,链接就不起作用了。我该怎么测试呢?我已经尝试了一些不起作用的简单正则表达式。

编辑:我正在分析的字符串来自应用程序的Sharepoint列表,我无法控制它们的格式,它们只是以"''drive''then''The''path''to''file"的形式输入到列表中。我的理解是,我需要检查是否有反斜杠,然后通过添加另一个反斜杠来转义它。但是怎么做呢?

编辑2:很高兴知道我走在了正确的轨道上。从我在互联网上读到的内容来看,我认为这是一种类似的东西。然而,我仍然无法让它发挥作用。也许你们可以帮我。。。。

我从sharepoint列表中获取了如下字段(sharepoint存储前缀为"ows_"的字段名:

var devPath = "<a class='h_link' href='"+$(this).attr('ows_DEVPathURLServer')+"'>"+$(this).attr('ows_DEVPathURLServer')+"</a>";

如前所述,这对web URL非常有效。

所以后来我做了一个替换(/''/g,'''''');,但它不会运行。所以我想我会试试:

      var unregged = $(this).attr('ows_DEVPathURLServer');
      var regged = unregged.toString().split('''').join('''''');
      alert(regged);
      var devPath = "<a class='h_link' href='"+regged+"'>"+regged+"</a>";

只是为了打破我的思维过程。不起作用。我错过了什么?

谢谢!

为了使每个反斜杠"加倍",您可以执行以下操作:

myString.replace(/''/g, '''''')

请注意,每次在代码中看到两个反斜杠时,实际上都是一个,因为我们也需要在代码中对它们进行转义。

g表示全局替换,因此如果您有几个'',它们都将被替换。

这里有一个更快、无正则表达式的单行解决方案:

myString.split('''').join('''''');//replaces all backslashes with double backslashes.

在这里使用regexp太过分了。。。

您可以简单地检查这是否是"本地"位置,并在进一步传递之前将其转换为文件URI方案。

像这样的东西可能会起作用:

var localPathRegex = /^''('w)''/i;
if (localPathRegex.test(url)){
  url = url.replace(localPathRegex, 'file:///$1:/').replace(/''/g, '/');
}

这应该将'd'then'the'path'to'the'file转换为file:///d:/then/the/path/to/the/file

您需要用另一个反斜杠转义反斜杠。你传递的url看起来像这样:

c: ''''mydrive''''MyFolder