WordPress как на ладони
wordpress jino

wp_encode_emoji() WP 4.2.0

Конвертирует эмодзи (emoji) символы в переданной строке в их HTML код (&#x1f31b).

Эмодзи (emoji) - это общепринятые (имеющие спецификацию и поддерживающиеся многими устройствами) картинки-смайлики в кодировке utf-8mb4, введенные в WordPress с версии 4.2. Например: ? ? ? ❄.

На апрель 2015 года поддерживаются не все смайлики и для отображения нераспознаваемых смайлов в браузере, используется специальный скрипт.

Такие символы-смайлики требует специальную кодировку utf8mb4 при размещении их в БД, в противном случает символ не будет распознан и не сохраниться правильно. Конвертация с помощью wp_encode_emoji() позволяет сохранять эти символы в неподходящей для них кодировке utf8, где они сохраняются не как символы, а как их соответствующий код.

Кодировка utf-8 сама по себе поддерживает некоторые из иконок эмодзи, но далеко не все.

Используется в: wp_staticize_emoji().
✈ 1 раз = 0.00028с = быстро | 50000 раз = 8.13с = быстро

Хуков нет.

Возвращает

Строку, в которой символы-смайлики заменены на соответствующие HTML сущности.

Использование

wp_encode_emoji( $content );
$content(строка) (обязательный)
Строка, символы в которой нужно заменить.

Примеры

#1 Демонстрация замены символов-смайликов в строке на HTML сущности

$str = '😃 😁 😝 ❄ 😇';

$str = wp_encode_emoji( $str );

// $str теперь равен: 🌛 🌌 🍦 ❄ &#x1f36a

Код wp encode emoji: wp-includes/formatting.php WP 4.8.2

<?php
function wp_encode_emoji( $content ) {
	if ( function_exists( 'mb_convert_encoding' ) ) {
		$regex = '/(
		     \x23\xE2\x83\xA3               # Digits
		     [\x30-\x39]\xE2\x83\xA3
		   | \xF0\x9F[\x85-\x88][\xA6-\xBF] # Enclosed characters
		   | \xF0\x9F[\x8C-\x97][\x80-\xBF] # Misc
		   | \xF0\x9F\x98[\x80-\xBF]        # Smilies
		   | \xF0\x9F\x99[\x80-\x8F]
		   | \xF0\x9F\x9A[\x80-\xBF]        # Transport and map symbols
		)/x';

		$matches = array();
		if ( preg_match_all( $regex, $content, $matches ) ) {
			if ( ! empty( $matches[1] ) ) {
				foreach ( $matches[1] as $emoji ) {
					/*
					 * UTF-32's hex encoding is the same as HTML's hex encoding.
					 * So, by converting the emoji from UTF-8 to UTF-32, we magically
					 * get the correct hex encoding.
					 */
					$unpacked = unpack( 'H*', mb_convert_encoding( $emoji, 'UTF-32', 'UTF-8' ) );
					if ( isset( $unpacked[1] ) ) {
						$entity = '&#x' . ltrim( $unpacked[1], '0' ) . ';';
						$content = str_replace( $emoji, $entity, $content );
					}
				}
			}
		}
	}

	return $content;
}

Cвязанные функции

Из метки: эмодзи (emoji)

wp_encode_emoji 4 комментария
  • campusboy1837 cайт: wp-plus.ru

    Есть ли вариант их вообще отключить на сайте? Далеко не везде они нужны, но WP старательно добавляет код в тему.

    Ответить2.1 года назад #
    • campusboy1837 cайт: wp-plus.ru

      Есть плагин Disable Emojis - активировал и забыл. А можно кодом (взято из плагина) в functions.php:

      /* Отключение Emoji смайликов в WordPress без плагина */
      if (!function_exists(disable_emojis)) {
      	function disable_emojis() {
      		remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
      		remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
      		remove_action( 'wp_print_styles', 'print_emoji_styles' );
      		remove_action( 'admin_print_styles', 'print_emoji_styles' );
      		remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
      		remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
      		remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
      	}
      	add_action( 'init', 'disable_emojis' );
      }
      1
      Ответить2.1 года назад #
      • Игорь cайт: kuhnyagali.ru

        Почему то у меня не работает код ((

        Ответить1.8 года назад #
  • Игорь cайт: kuhnyagali.ru

    Прошу прощения, вставил на один сайт, а смотрел другой. Вроде работает.

    Ответить1.8 года назад #

Здравствуйте, !

Ваш комментарий