从字符串中删除非文本字符(如表情符号) [英] Remove non-text chars (like emoticons) from string

查看:16
本文介绍了从字符串中删除非文本字符(如表情符号)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何从字符串中替换像🎧🎬这样的字符?有时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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆