我使用此 preg 替换来删除字符串中的所有表情符号:
$data['message'] = preg_replace("/([0-9|#][\x{20E3}])|[\x{00ae}|\x{00a9}|\x{203C}|\x{2047}|\x{2048}|\x{2049}|\x{3030}|\x{303D}|\x{2139}|\x{2122}|\x{3297}|\x{3299}][\x{FE00}-\x{FEFF}]?|[\x{2190}-\x{21FF}][\x{FE00}-\x{FEFF}]?|[\x{2300}-\x{23FF}][\x{FE00}-\x{FEFF}]?|[\x{2460}-\x{24FF}][\x{FE00}-\x{FEFF}]?|[\x{25A0}-\x{25FF}][\x{FE00}-\x{FEFF}]?|[\x{2600}-\x{27BF}][\x{FE00}-\x{FEFF}]?|[\x{2900}-\x{297F}][\x{FE00}-\x{FEFF}]?|[\x{2B00}-\x{2BF0}][\x{FE00}-\x{FEFF}]?|[\x{1F000}-\x{1F6FF}][\x{FE00}-\x{FEFF}]?/u", "", $data['message']);
Run Code Online (Sandbox Code Playgroud)
这非常有效,但我不想删除它们。相反,我必须用 bbcode 替换它们。这意味着字符串中的每个表情符号都应该替换为自己的 bbcode。
例子:
U+1F600
Run Code Online (Sandbox Code Playgroud)
变成
[emoji]1f600[/emoji]
Run Code Online (Sandbox Code Playgroud)
或者
U+1F603
Run Code Online (Sandbox Code Playgroud)
变成
[emoji]1f603[/emoji]
Run Code Online (Sandbox Code Playgroud)
这可能吗?非常感谢。
我尝试了您正在使用的模式,它似乎与所有现有的 unicode 表情符号不匹配。
\n事实上,我发现完全理解表情符号是如何构建的相当复杂,特别是因为它们由一个代码点组成,然后可以使用序列进行修改。通常,您可以使用表情符号的变体来改变脸部的肤色。两个女人和两个女孩的家庭图标的另一个例子, \xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d\xe2\x80\x8d您可以按照以下顺序构建它:\xe2\x80\x8d + U+200D + \xe2\x80\x8d + U+200D + \xe2\x80\x8d + U+200D +
我在这里找到了有趣的解释:https://www.contentful.com/blog/2016/12/06/unicode-javascript-and-the-emoji-family/
\n但回到你的问题,你preg_replace()似乎是一个快速、几乎有效的解决方案。我首先写了另一个模式,\n似乎包含更多情况:
$data[\'message\'] = preg_replace(\n \'/[\\x{1F600}-\\x{1F64F}\\x{2700}-\\x{27BF}\\x{1F680}-\\x{1F6FF}\\x{24C2}-\\x{1F251}\\x{1F30D}-\\x{1F567}\\x{1F900}-\\x{1F9FF}\\x{1F300}-\\x{1F5FF}]/u\',\n \'[emoji]$0[/emoji]\',\n $data[\'message\']\n);\nRun Code Online (Sandbox Code Playgroud)\n不要问我如何找到范围列表。我只是用谷歌搜索了一下,然后尝试了 regex101,直到它可以处理大量表情符号。我将其保存在这里: https: //regex101.com/r/bLuezV/2
\n但是,我注意到我对上面的 regex101 的测试对于序列(通常是上面的家庭示例)不起作用。由于突出显示,它看起来\n正在工作,但不,\n它不\n处理序列。所以我们必须找到更好的正则表达式模式!\n处理所有正确的情况需要太多工作,并且\n模式将难以维护。
\n我认为最好使用特定的库来完成您正在寻找的事情。当新的表情符号出现时,它肯定会更新。
\n包含所有最新序列的文本文件:
\n https://github.com/mathiasbynens/emoji-test-regex-pattern/blob/main/dist/latest/index.txt
这个 PHP 项目可以帮助你:https ://github.com/aaronpk/emoji- detector-php
\n另外,请考虑使用任何其他 PHP Composer包(因为项目经常更改并被更新的项目替换)。通常,只需\nemoji在 packagist.org 上搜索即可:https://packagist.org/?query=emoji
v标志在JavaScript中,自 2023 年以来,\n v nicode 标志\ ng 使我们能够匹配简单的表情符号图标,而且在\n的帮助下\n 也可以匹配由多个代码点组成的表情符号\\p{RGI_Emoji}。
这使事情变得更加容易: https: //regex101.com/r/bLuezV/6
\n| 归档时间: |
|
| 查看次数: |
1726 次 |
| 最近记录: |