从字符串中删除非文本字符(如表情符号) [英] Remove non-text chars (like emoticons) from string
本文介绍了从字符串中删除非文本字符(如表情符号)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何从字符串中替换像🎧🎬这样的字符?有时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
(空格到商标符号)。我之所以选择这个范围,是因为它应该涵盖绝大多数与单词相关的字符,包括带口音的字母和非英语字符。(诚然,它还包括许多与单词无关的字符。您可能希望使用两个单独的范围以获得更大的特异性,如:/[^x{20}-x{60}x{7B}-x{FF}]/ui
--这种情况下-不区分地搜索两个范围:空格到重音和左花括号到拉丁文小写字母y(带分音符)
如果您发现此范围过大或处理时间过长,您可以自行决定适当的字符范围。
例如,您可能喜欢轻得多但不太慷慨的/[^x20-x7E]/u
(从空格到代字号)。但是,如果您将其应用于我上面的任何一种法语$VideoTitles
,则会通过删除合法字母来损坏文本。
这里是menu of characters and their unicode numbers,帮助您了解上述范围内和范围之外的内容。
*并记住在结束分隔符之后包括Unicode标志u
。
为了完整性,我应该说删除这两个emoji的字面/狭义解决方案是:
$VideoTitle=preg_replace('/[x{1F3A7}x{1F3AC}]/u','',$VideoTitle); // omit 2 emojis
这些表情符号分别称为"快板(U+1F3AC)"和"耳机(U+1F3A7)"。
这篇关于从字符串中删除非文本字符(如表情符号)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文