从变量中删除表情符号

6

我正在使用Smarty来传递和显示first_name变量的内容。一些用户的first_name中含有Emoji表情符号 (http://en.wikipedia.org/wiki/Emoji),我想知道如何在满足以下条件的情况下完成操作:a)如果first_name包含表情符号,则不显示用户的first_name; b)从first_name中过滤掉表情符号字符。这能否在Smarty中实现?或者可以通过PHP在Smarty中实现吗?


IT只是(如果我错了请纠正)U+F000到U+FFFF。 - Cole Tobin
4个回答

15

这些表情符号编码在 U+1F300 至 U+1F5FF 区块中。

preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $first_name)

这将会剥离它们


我尝试过这个,但没有成功,但我不确定我是否正确实现了它。这是我尝试编码的方式:http://jsbin.com/epefej/1/edit。 - conbask
@585connor:你需要像这样做 $first_name = preg_replace('~\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]~', '', $first_name); echo $first_name; 当然是来自 PHP(PHP 的开/闭标签是 <?php?>)。 - Alix Axel
preg_replace不匹配。我只有表情符号( ),如何解码它,例如x80....?这样我就可以preg_replace了吗? - saravanabawa
1
根据维基百科,表情符号的编码范围是从U+1F600到U+1F64F:https://en.wikipedia.org/wiki/Emoticons_(Unicode_block)。你的编码数字是从哪里获取的? - Yahya Uddin
这是在同一位置的双心形符号!!我已将其移除: $text = str_replace("❤️","",$text); - Dylan B

12

我尝试了上面发布的一些解决方案,但都没有奏效。不过,当我使用 mb_ 函数将字符串转换为 UTF-8 格式时,它可以正常工作。

你可以使用以下代码:

trim( preg_replace('/[\x00-\x1F\x80-\xFF]/', '', 
      mb_convert_encoding( $emojiString, "UTF-8" ) ) );

对我来说没问题。


1
点赞!这是我在 Stack Overflow 找到的第 6 个解决方案,也是唯一一个适用于我处理的特定字符串的。 - Chris Ostmo
5
这也会删除像ñ或é这样的特殊字符。 - xavip

2
function remove_emoji($string) {

    // Match Emoticons
    $regex_emoticons = '/[\x{1F600}-\x{1F64F}]/u';
    $clear_string = preg_replace($regex_emoticons, '', $string);

    // Match Miscellaneous Symbols and Pictographs
    $regex_symbols = '/[\x{1F300}-\x{1F5FF}]/u';
    $clear_string = preg_replace($regex_symbols, '', $clear_string);

    // Match Transport And Map Symbols
    $regex_transport = '/[\x{1F680}-\x{1F6FF}]/u';
    $clear_string = preg_replace($regex_transport, '', $clear_string);

    // Match Miscellaneous Symbols
    $regex_misc = '/[\x{2600}-\x{26FF}]/u';
    $clear_string = preg_replace($regex_misc, '', $clear_string);

    // Match Dingbats
    $regex_dingbats = '/[\x{2700}-\x{27BF}]/u';
    $clear_string = preg_replace($regex_dingbats, '', $clear_string);

    return $clear_string;
}

我在https://medium.com/coding-cheatsheet/remove-emoji-characters-in-php-236034946f51找到了这个答案。

该答案介绍了如何在PHP中移除表情符号。

这个是从这个线程中唯一一个移除了点赞表情符号的。 (顺便说一下,这个符号会破坏保存字符串到utf8_general_ci字段的过程。) - Jan Potužník

1

问:使用Smarty可以做到吗? 答:可以。

问:在Smarty中可以使用PHP实现吗? 答:可以。但请不要在模板中使用PHP标签。

尝试在模板变量上使用变量修饰符。

{* apply modifier to a variable *}
{$first_name|emojistrip}

将以下内容放入名为“modifier.emojistrip.php”的文件中,放置在“/smarty/plugins/”文件夹中。
function smarty_modifier_emojistrip($string)
{       
    return preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $string);
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接