WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com

wp_staticize_emoji() WP 4.2.0

Конвертирует emoji символы в переданном тексте в html элементы <img>.

Текст внутри тегов code|pre|style|script|textarea не обрабатывается.

Работает на основе: wp_encode_emoji()
✈ 1 раз = 0.000134с = быстро | 50000 раз = 1.75с = быстро
Хуки из функции:
Возвращает

Строку. HTML тег IMG.

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

wp_staticize_emoji( $text );
$text(строка) (обязательный)
Текст в котором нужно конвертировать символы emoji.

Примеры

#1 Демонстрация конвертации символов

echo wp_staticize_emoji('текст ✈');

// Выведет:
// текст <img src="http://s.w.org/images/core/emoji/72x72/1f50c.png" alt="✈" class="wp-smiley" style="height: 1em; max-height: 1em;" />

Код wp_staticize_emoji: wp-includes/formatting.php VER 5.0.1

<?php
function wp_staticize_emoji( $text ) {
	if ( false === strpos( $text, '&#x' ) ) {
		if ( ( function_exists( 'mb_check_encoding' ) && mb_check_encoding( $text, 'ASCII' ) ) || ! preg_match( '/[^\x00-\x7F]/', $text ) ) {
			// The text doesn't contain anything that might be emoji, so we can return early.
			return $text;
		} else {
			$encoded_text = wp_encode_emoji( $text );
			if ( $encoded_text === $text ) {
				return $encoded_text;
			}

			$text = $encoded_text;
		}
	}

	$emoji = _wp_emoji_list( 'entities' );

	// Quickly narrow down the list of emoji that might be in the text and need replacing.
	$possible_emoji = array();
	foreach( $emoji as $emojum ) {
		if ( false !== strpos( $text, $emojum ) ) {
			if ( version_compare( phpversion(), '5.4', '<' ) ) {
				$possible_emoji[ $emojum ] = html_entity_decode( $emojum, ENT_COMPAT, 'UTF-8' );
			} else {
				$possible_emoji[ $emojum ] = html_entity_decode( $emojum );
			}
		}
	}

	if ( ! $possible_emoji ) {
		return $text;
	}

	/** This filter is documented in wp-includes/formatting.php */
	$cdn_url = apply_filters( 'emoji_url', 'https://s.w.org/images/core/emoji/11/72x72/' );

	/** This filter is documented in wp-includes/formatting.php */
	$ext = apply_filters( 'emoji_ext', '.png' );

	$output = '';
	/*
	 * HTML loop taken from smiley function, which was taken from texturize function.
	 * It'll never be consolidated.
	 *
	 * First, capture the tags as well as in between.
	 */
	$textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE );
	$stop = count( $textarr );

	// Ignore processing of specific tags.
	$tags_to_ignore = 'code|pre|style|script|textarea';
	$ignore_block_element = '';

	for ( $i = 0; $i < $stop; $i++ ) {
		$content = $textarr[$i];

		// If we're in an ignore block, wait until we find its closing tag.
		if ( '' == $ignore_block_element && preg_match( '/^<(' . $tags_to_ignore . ')>/', $content, $matches ) )  {
			$ignore_block_element = $matches[1];
		}

		// If it's not a tag and not in ignore block.
		if ( '' ==  $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] && false !== strpos( $content, '&#x' ) ) {
			foreach ( $possible_emoji as $emojum => $emoji_char ) {
				if ( false === strpos( $content, $emojum ) ) {
					continue;
				}

				$file = str_replace( ';&#x', '-', $emojum );
				$file = str_replace( array( '&#x', ';'), '', $file );

				$entity = sprintf( '<img src="%s" alt="%s" class="wp-smiley" style="height: 1em; max-height: 1em;" />', $cdn_url . $file . $ext, $emoji_char );

				$content = str_replace( $emojum, $entity, $content );
			}
		}

		// Did we exit ignore block.
		if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content )  {
			$ignore_block_element = '';
		}

		$output .= $content;
	}

	// Finally, remove any stray U+FE0F characters
	$output = str_replace( '&#xfe0f;', '', $output );

	return $output;
}

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

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

2 коммента
  • А какая функция делает обратное?????
    Или как вордпресс сохраняет в базе эти еможи?

    Ответить6 мес назад #
    • Kama7144

      В БД хранятся символы, а при выводе на экран можно пропускать контент через эту функцию и они превратятся в картинки. Это нужно для случаев когда устройство (браузер) не поддерживает эмодзи. Или бывает, что браузеры устройства по своему отображают эмодзи, а тут все они будут такие какие указаны...

      Ответить6 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться