如何在 git 存储库中找到双向 Unicode 控制字符?

How to find Bidirectional Unicode control characters in git repo?

我在 NPM 上有一个包,显示它包含 socket.dev 报告的“双向 unicode 控制字符”。

我找到了这个问题的答案

我用过:

git grep -oP "[^\x00-\x7F]*"

它在二进制文件中找到了一些匹配项,所以我从 .gitattributes 中删除了所有二进制标志,现在我只有 __tests__ 目录中的文件,其中包含 ANSI 文件和一张图像,但这些文件未发布到 NPM。

找到这些“双向 unicode 控制字符”的正确方法是什么?

perl一班

perl -CSD -ne 'print "$ARGV: $_" if /\p{Bidi_Control}/' file1 file2 ...

将打印出包含双向控制字符的给定 UTF-8 编码文件的行。

不幸的是,git grep -P 使用的 PCRE 不支持接近 perl 正则表达式所支持的 unicode 属性级别的任何地方。不过,您可以明确搜索控制字符:

$ git clone https://github.com/jcubic/jquery.terminal.git
$ cd jquery.terminal
$ git grep -IP '(*UTF)[\x{061C}\x{200E}\x{200F}\x{202A}-\x{202E}\x{2066}-\x{2069}]'
js/jquery.terminal-src.js:        "&lrm;": "<U+200E>",
js/jquery.terminal-src.js:        "&rlm;": "<U+200F>",

-I 选项跳过二进制文件。

(取自 perluniprops 的控制字符列表)。