代码:
var_dump(preg_replace('#\x{1F634}#u', '', 'This is the sleeping emoji: '));
var_dump(preg_replace('#\x{1F1FB 1F1F3}#u', '', 'This is the Vietnam flag: '));
预期输出:
string(28) "This is the sleeping emoji: "
string(33) "This is the Vietnam flag: "
实际输出:
string(28) "This is the sleeping emoji: "
string(34) "This is the Vietnam flag: "
分析:
成功删除单码点表情符号,但未检测到多码点表情符号。
进行的研究:
阅读以下内容:https ://www.php.net/manual/en/regexp.reference.escape.php
在 "\x" 之后,最多读取两个十六进制数字(字母可以是大写或小写)。在 UTF-8 模式下,允许使用 "\x{...}",其中大括号的内容是一串十六进制数字。它被解释为 UTF-8 字符,其代码编号是给定的十六进制数。如果值大于 127,则原始十六进制转义序列 \xhh 匹配两字节 UTF-8 字符。
不幸的是,它没有提到多代码点 Unicode 字符。
问题:
如何在 PHP PCRE 语法中指定多码点表情符号/Unicode 字符?
有用的说明:
这不是一个范围!我能够检测和删除范围。这是由多个“代码点”组成的单个表情符号/Unicode 字符。这里指定了很多:https ://www.unicode.org/Public/emoji/13.1/emoji-sequences.txt