【发布时间】:2020-03-02 03:11:46
【问题描述】:
我使用这个正则表达式从字符串中删除所有可能的表情符号。
/(\x{00a9}|\x{00ae}|[\x{2000}-\x{3300}]|\x{d83c}[\x{d000}-\x{dfff}]|\x{d83d}[\x{d000}-\x{dfff}]|\x{d83e}[\x{d000}-\x{dfff}])/u
但它会抛出这个异常:
preg_replace():编译失败:在偏移量 46 处不允许使用 Unicode 代码点 (>= 0xd800 &&
我用谷歌搜索过这个问题,但我找不到任何关于这个问题的准确答案。如果有人告诉我这个错误的确切含义以及解决方案是什么,我将不胜感激。
还有这是什么:
>= 0xd800 && <= 0xdfff
上面的正则表达式是这个来源的PCRE版本:
【问题讨论】:
-
删除所有可能的表情符号是不可行的。如果将来添加新的表情符号怎么办?看看这篇文章:stackoverflow.com/a/48946207/1839439
-
Working for JavaScript 是这里的关键词。请记住,JS 已损坏,无法正确处理 Unicode。您使用的正则表达式在 PHP 中不起作用,它考虑 Unicode 代码点,而不是 UTF-16 代码单元。您尝试匹配的代理对在 PHP 中是非法的。
-
因为这个代码点不存在。啊哈,所以你想匹配所有的表情符号? v12.1?
-
在JS中不存在,在JS中,两个字节是独立的,在PHP中,字节被连接成一个单独的代码点——这里是失败的地方(JS没有尝试做那个)。