6

我正在使用 Smarty 传入并显示first_name变量的内容。一些用户的表情符号字符(http://en.wikipedia.org/wiki/Emoji),first_name我想知道如何 a)有条件地不显示first_name包含表情符号的用户或 b)从first_name. Smarty可以做到这一点吗?可以在 Smarty 中用 PHP 完成吗?

4

4 回答 4

15

表情符号在 U+1F300–U+1F5FF 块中编码。

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

这会去掉那些

于 2012-10-30T23:16:18.207 回答
12

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

您可以使用:

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

为我工作。

于 2016-01-05T16:26:26.260 回答
1

问:这可以用 Smarty 完成吗?答:是的。

Q: Smarty 中可以用 PHP 完成吗?答:是的。但请不要在模板端使用 PHP 标签。

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

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

将以下内容放入文件夹“/smarty/plugins/”中名为“modifier.emojistrip.php”的文件中。

function smarty_modifier_emojistrip($string)
{       
    return preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $string);
}

于 2012-11-04T10:21:08.423 回答
1
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找到了这个答案

于 2021-12-08T07:30:02.927 回答