转义字符串中的反斜杠 - javascript

IT技术 javascript file input escaping backslash
2021-01-21 10:07:12

我需要显示当前选定文件的名称(在<input type="file">元素中)。

一切都很好,唯一的问题是我得到了这种字符串“C:\fakepath\typog_rules.pdf”(浏览器自动将其作为输入元素的值)。

当我尝试拆分字符串时,'\'或者'\\'由于未转义的斜杠而失败。尝试匹配/替换斜线也失败了。有没有解决的办法?我需要它至少在 Opera 和 IE 中工作(因为在其他浏览器中我可以使用 FileReader)

EG 我得到“C:\fakepath\typog_rules.pdf”作为输入并希望得到“typog_rules.pdf”作为输出。

5个回答

出于安全原因,不可能获得通过<input type="file" />元素引用的文件的真实完整路径

这个问题已经提到,并链接到关于这个主题的其他 Stack Overflow 问题。


以前的答案,作为通过标题、标签和问题访问此页面的未来访问者的参考。
必须转义反斜杠。

string = string.split("\\");

在 JavaScript 中,反斜杠用于转义特殊字符,例如换行符 ( \n)。如果要使用文字反斜杠,则必须使用双反斜杠。

因此,如果要匹配两个反斜杠,则必须使用四个反斜杠。例如,alert("\\\\")将显示一个包含两个反斜杠的对话框。

@user1113690 你想要什么?斯普利特"C:\\fake\\path\\file"["C:", "fake", "path", "file"]您必须澄清您的问题,并添加当前输出、实际输入、预期输出和相关代码。
2021-03-19 10:07:12
@Pankaj:而且你还是弄错了,字符串在内存中的表示永远不会被转义。转义是序列化的问题。.val() 返回未转义的字符串。不正确的是,在打印时,字符串的打印值可能不会往返,因为字符串文字需要转义。
2021-03-26 10:07:12
没有帮助。您无法控制浏览器为您提供的 input[file] 值。"C:\fakepath \typog_rules.pdf".split("\\"); => ["C:akepath ypog_rules.pdf"]
2021-04-04 10:07:12
啊哈 - 这是预期的行为。显然,出于安全原因一段 JavaScript 可以获取文件的完整路径不可取的总而言之,不可能在<input type=file>element 中获取文件的完整路径
2021-04-06 10:07:12
我得到“C:\fakepath\typog_rules.pdf”作为输入并希望得到“typog_rules.pdf”作为输出。
2021-04-10 10:07:12

我认为这更接近您正在寻找的答案:

<input type="file">

$file = $(file);
var filename = fileElement[0].files[0].name;
如果我有这样的字符串 "FILEUPLOADS\city_sri\src\com\travelocityapp22\commonmodule\dto" 那么如何使用 '\' 拆分它们
2021-03-23 10:07:12

转义反斜杠字符。

foo.split('\\')
oop,不知道是不是这个问题。看起来 OP 已经尝试过(我正在查看问题的来源 - 并对其进行了编辑以清楚显示)
2021-04-06 10:07:12

有点hacky,但它有效:

const input = '\text';
const output = JSON.stringify(input).replace(/((^")|("$))/g, "").trim();

console.log({ input, output });
// { input: '\text', output: '\\text' }

向元素添加输入 id 并执行以下操作:

document.getElementById('inputId').value.split(/[\\$]/).pop()