我正在使用Smarty来传递和显示first_name
变量的内容。一些用户的first_name
中含有Emoji表情符号 (http://en.wikipedia.org/wiki/Emoji),我想知道如何在满足以下条件的情况下完成操作:a)如果first_name
包含表情符号,则不显示用户的first_name
; b)从first_name
中过滤掉表情符号字符。这能否在Smarty中实现?或者可以通过PHP在Smarty中实现吗?
我正在使用Smarty来传递和显示first_name
变量的内容。一些用户的first_name
中含有Emoji表情符号 (http://en.wikipedia.org/wiki/Emoji),我想知道如何在满足以下条件的情况下完成操作:a)如果first_name
包含表情符号,则不显示用户的first_name
; b)从first_name
中过滤掉表情符号字符。这能否在Smarty中实现?或者可以通过PHP在Smarty中实现吗?
这些表情符号编码在 U+1F300 至 U+1F5FF 区块中。
preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $first_name)
这将会剥离它们
$first_name = preg_replace('~\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]~', '', $first_name); echo $first_name;
当然是来自 PHP(PHP 的开/闭标签是 <?php
和 ?>
)。 - Alix Axel我尝试了上面发布的一些解决方案,但都没有奏效。不过,当我使用 mb_ 函数将字符串转换为 UTF-8 格式时,它可以正常工作。
你可以使用以下代码:
trim( preg_replace('/[\x00-\x1F\x80-\xFF]/', '',
mb_convert_encoding( $emojiString, "UTF-8" ) ) );
对我来说没问题。
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中移除表情符号。问:使用Smarty可以做到吗? 答:可以。
问:在Smarty中可以使用PHP实现吗? 答:可以。但请不要在模板中使用PHP标签。
尝试在模板变量上使用变量修饰符。
{* apply modifier to a variable *}
{$first_name|emojistrip}
function smarty_modifier_emojistrip($string)
{
return preg_replace('/\xEE[\x80-\xBF][\x80-\xBF]|\xEF[\x81-\x83][\x80-\xBF]/', '', $string);
}