gpt4 book ai didi

php - 从字符串中删除非文本字符(如表情符号)

转载 作者:行者123 更新时间:2023-12-02 20:48:52 25 4
gpt4 key购买 nike

如何从字符串中替换 🎧🎬 之类的字符?有时 YouTube 视频标题包含这样的字符。我不想替换像 !@#$%^&*() 这样的字符。

我目前正在使用 preg_replace('/[^A-Za-z0-9\-]/', '', $VideoTitle);

样本数组:

$VideoTitles[]='Sia 2017 Cheap Thrills 2017 live 🎧🎬'; 

$VideoTitles[]='TAYLOR SWIFT - SHAKE IT OFF 🎬🎧 #1989';

预期输出:

Sia 2017 Cheap Thrills 2017 live 
TAYLOR SWIFT - SHAKE IT OFF #1989

最佳答案

示例输入代码:Demo

$VideoTitles=[
'Kilian à Dijon #4 • Vlog #2 • Primark again !? 🎬 - YouTube',
'Funfesty 🎧 🎬 on Twitter: "Je commence à avoir mal à la tête à force',
'Sia 2017 Cheap Thrills 2017 live 🎧🎬'
];

$VideoTitles=preg_replace('/[^ -\x{2122}]\s+|\s*[^ -\x{2122}]/u','',$VideoTitles); // remove out of range characters and whitespace character on one side only

var_export($VideoTitles);

输出:

array (
0 => 'Kilian à Dijon #4 • Vlog #2 • Primark again !? - YouTube',
1 => 'Funfesty on Twitter: "Je commence à avoir mal à la tête à force',
2 => 'Sia 2017 Cheap Thrills 2017 live',
)

上述正则表达式模式使用的字符范围从 \x20-\x2122(spacetrade-mark-sign)。我选择这个范围是因为它应该涵盖绝大多数与单词相关的字符,包括带有重音符号的字母和非英语字符。 (不可否认,它还包括许多与单词无关的字符。您可能喜欢使用两个单独的范围以获得更大的特异性,例如:/[^\x{20}-\x{60}\x{7B}-\x{FF}]/ui -- 这种不区分大小写的搜索两个范围:空格重音符左大括号带分音符的拉丁文小写字母 y)

如果您发现此范围过大或处理时间过长,您可以自行决定合适的字符范围。

例如,您可能喜欢更轻巧但不那么大方的 /[^\x20-\x7E]/u(从 spacetilde).但是,如果您将它应用于我上面的任何一个法语 $VideoTitles,那么您将通过删除合法字母来破坏文本。

这是一个menu of characters and their unicode numbers帮助您了解上述范围内和超出范围的内容。

*请记住在结束分隔符之后包含一个 unicode 标志 u


为了完整起见,我应该说删除这两个表情符号的字面/狭义解决方案是:

$VideoTitle=preg_replace('/[\x{1F3A7}\x{1F3AC}]/u','',$VideoTitle);  // omit 2 emojis

这些表情符号被称为“拍板 (U+1F3AC)”和“耳机 (U+1F3A7)”。

关于php - 从字符串中删除非文本字符(如表情符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43097087/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com