如果您最关心的是强制单色显示,以便表情符号不会在文本中突出太多,则可能需要CSS过滤器(单独使用或与Unicode变体选择器结合使用)。
p.gscale {
-webkit-filter: grayscale(100%);
filter: grayscale(100%);
}
a {
color: #999;
-webkit-filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
filter: grayscale(100%) sepia(100%) saturate(400%) hue-rotate(170deg);
}
<p class="gscale">You've now got emoji display on 🔒lockdown🔒.</p>
<p>External Link: <a href="https://knowyourmeme.com/memes/party-hard">celebrate 🎉</a></p>
与变体选择器不同,表情符号的呈现方式无关紧要,因为CSS过滤器适用于所有内容。(我使用它们来对已修改为指向Wayback Machine的超链接上的PNG格式的“链接类型”图标进行灰度处理。)
只需注意一下警告。您不能在子级中覆盖父元素的过滤器,因此该技术不能用于对段落进行灰度处理,然后重新着色其中的链接。😢
...不过,在您要使整个对象成为超链接或不允许其中包含丰富标记的情况下,它很有用。(例如标题和说明)
但是,除非实际应用CSS,否则这将无法工作,因此我将提供第二个选项,该选项在<title>
元素上比Unicode变体选择器更可靠(我在看GitHub。我不喜欢伪造的图标浏览器标签):
如果要将用户提供的字符串放入<title>
元素中,请滤除表情符号以及任何粗体/斜体/下划线/等。标记。(是的,对于那些错过它的人,该标准的确要求<title>
除&符转义符之外,标准内容还应为纯文本,并且我测试过的浏览器将所有解释标签均视为纯文本。)
我可以想到的两种方法是:
- 直接使用手动维护的正则表达式来匹配最新版本的Unicode放置其表情符号及其修饰符的块。
- 遍历字素簇并丢弃任何包含已识别表情符号代码点的簇。(一个字素簇是一个基本字形加上所有变音符和其他构成可见字符的修饰符。我链接的示例使用Python的regex引擎对令牌进行标记化,然后
emoji
对数据库进行打包,但是Rust是一个很好的语言示例通过像这样的板条箱可以快速,轻松地迭代字素簇unicode-segmentation
。