saber酱的抱枕

生于忧患,死于安乐

09/23
13:34
软件

Chrome 扩展下载文件时,不能使用的字符

Windows 中有一些字符不能做文件名:

\ / : ? " < > * |

但是 Chrome 的下载 api 里,有更多的字符不能做文件名,否则下载会失败。这些字符里大多是控制字符。

Chrome 扩展下载文件时,不能使用的字符可以建立一个正则表达式,对文件名进行替换:

// 不安全的字符,是 Chrome 和 Windows 不允许做文件名的字符
const notSafeString = `[\u0001-\u001f\u007f-\u009f\u00ad\u0600-\u0605\u061c\u06dd\u070f\u08e2\u180e\u200b-\u200f\u202a-\u202e\u2060-\u2064\u2066-\u206f\ufdd0-\ufdef\ufeff\ufff9-\ufffb\ufffe\uffff\\\/:\?"<>\*\|~]`
const safeFileName = new RegExp(notSafeString, 'g') // 安全的文件名

这些字符是 Reinford 测试出来的,测试结果的文件:
链接: https://pan.baidu.com/s/1y8AVKGmasV1ZYiCErwc1Zg 提取码: q41v

此外,还有一些情况要处理。

1. Chrome 不允许文件夹和文件名的开头、结尾使用点 .
2. 路径首尾不允许有空格。
3. 路径中出现多个斜线会报错,如 download//a.jpg

Chrome 扩展下载文件时,不能使用的字符

04/23
09:13
学习

不规则的空白

今天有人报告我的 pixiv 图片下载器在某些情况下,无法保存某个图片。我去检查了下,发现这个作品(pid=73111615)最后的空格暗藏玄机。

不规则的空格 空白

复制这个空格,粘贴到别的地方,把光标放到最后,然后按键盘的 ← 箭头,会发现需要按 4 次才能到这个空格的前面。

复制到浏览器控制台,发现确实是 4 个字符。

不规则的空格 空白

经过检查,第一个空格是普通的空格,后面 3 个是特殊字符,它并不会显示出来。浏览器控制台里那时应该是做了特殊处理。这玩意放在代码里,ESLint 报错说这是“irregular whitespace”,不规则的空白。

最后我复制它的 Unicode 码 \u200b,把它替换掉了。

不规则的空格 空白

特殊字符防不胜防啊,不知道以后还会不会遇到别的来捣乱。

不规则的空白