wp_staticize_emoji() – Converts emoji to a static img element.

You appear to be a bot. Output may be restricted

Description

Converts emoji to a static img element.

Usage

$string = wp_staticize_emoji( $text );

Parameters

$text
( string ) required – The content to encode.

Returns

string The encoded content.

Source

File name: wordpress/wp-includes/formatting.php


Lines:

1 to 89 of 89
function wp_staticize_emoji( $text ) {
  if ( ! str_contains( $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 ( str_contains( $text, $emojum ) ) {
      $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/14.0.0/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] && str_contains( $content, '&#x' ) ) {
      foreach ( $possible_emoji as $emojum => $emoji_char ) {
        if ( ! str_contains( $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;
}
 

 View on GitHub View on Trac