首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >清除javascript中文件名的unicode对吗?

问清除javascript中文件名的unicode对吗?
EN

Stack Overflow用户
提问于 2022-07-19 12:21:32
回答 1查看 100关注 0票数 1

我的web扩展名无法启动文件下载,因为文件名中有一对带有无效文件名错误的表情符号,当使用多个表情符号时,这似乎是一些unicode surrogate pair问题。下面是一个冒犯的文件名示例:

代码语言:javascript
复制
<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中检查上面共享的文件名的显示问题.

​

​

推动下载的代码:

代码语言:javascript
复制
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启动下载的背景代码:

代码语言:javascript
复制
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中只有有效的文件名?看起来表情符号不是一个问题,但多个表情符号是!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-24 17:23:32

可以使用Unicode属性类在字符串中查找emojis。

语法是\p{.}

示例

​

代码语言:javascript
复制
console.log("‍aa".replace(/\p{So}/gu, ""))

​

还有更多的选项可以使用类\p{.},您可以在docs中看到它们

如果单个表情符号不造成故障,但男子农民造成的问题是零宽度拼接。它是铬文件名中的无效符号。运行U+200D搜索

结果正则表达式

代码语言:javascript
复制
/\p{So}\u{200D}\p{So}/gu
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73036830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档