我的web扩展名无法启动文件下载,因为文件名中有一对带有无效文件名错误的表情符号,当使用多个表情符号时,这似乎是一些unicode surrogate pair问题。下面是一个冒犯的文件名示例:
<a href="https://www.example.com/filestream.xyz"
download="The New World Order Presentation .pdf"
target="_blank">Download File</a>从“Chrome元素”屏幕截图中可以看出,农场主表情符号(https://emojipedia.org/man-farmer/)似乎是多个代码点的组合,也是导致文件名无效的原因。在这里粘贴代码时,如上面所示,表情符号被正确地解析为农夫和标志,但是当我们在Dev-tools DOM中看到它时,它们就不同了。在devtools中检查上面共享的文件名的显示问题.

推动下载的代码:
function notifyExtension(e) {
var elem = e.currentTarget;
var fileSaveName = elem.getAttribute("download");
e.returnValue = false;
if (e.preventDefault) {
e.preventDefault();
}
var loop = elem.getAttribute("loop");
if (loop) {
chrome.runtime.sendMessage({
url: elem.getAttribute("href"),
filename: fileSaveName,
});
}
return false;
}使用浏览器api启动下载的背景代码:
chrome.runtime.onMessage.addListener(function (message) {
let fname = message.filename
.trim()
.replace(/[`~!@#$%^&*()_|+\-=?;:'",<>{}[\]\\/]/gi, "-")
.replace(/[\\/:*?"<>|]/g, "_")
.substring(0, 240)
.replace(/\s+/g, " ");
chrome.downloads.download({
url: message.url,
filename: fname,
conflictAction: "uniquify",
saveAs: true,
});
});浏览器控制台中出现的错误:
未选中的lastError值:错误:文件名不能包含非法字符

如何使字符串在javascript中只有有效的文件名?看起来表情符号不是一个问题,但多个表情符号是!
发布于 2022-07-24 17:23:32
可以使用Unicode属性类在字符串中查找emojis。
语法是\p{.}
示例
console.log("aa".replace(/\p{So}/gu, ""))
还有更多的选项可以使用类\p{.},您可以在docs中看到它们
如果单个表情符号不造成故障,但男子农民造成的问题是零宽度拼接。它是铬文件名中的无效符号。运行U+200D搜索
结果正则表达式
/\p{So}\u{200D}\p{So}/guhttps://stackoverflow.com/questions/73036830
复制相似问题