diff --git src/wp-includes/formatting.php src/wp-includes/formatting.php
index a0438e9..2cd2212 100644
--- src/wp-includes/formatting.php
+++ src/wp-includes/formatting.php
@@ -3141,7 +3141,7 @@ function translate_smiley( $matches ) {
 /**
  * Convert text equivalent of smilies to images.
  *
- * Will only convert smilies if the option 'use_smilies' is true and the global
+ * Will only convert smilies if the option `'use_smilies'` is `true` and the global
  * used in the function isn't empty.
  *
  * @since 0.71
@@ -3155,28 +3155,28 @@ function convert_smilies( $text ) {
 	global $wp_smiliessearch;
 	$output = '';
 	if ( get_option( 'use_smilies' ) && ! empty( $wp_smiliessearch ) ) {
-		// HTML loop taken from texturize function, could possible be consolidated
-		$textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // capture the tags as well as in between
-		$stop    = count( $textarr );// loop stuff
+		// HTML loop taken from texturize function, could possible be consolidated.
+		$textarr = preg_split( '/(<.*>)/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE ); // Capture the tags as well as in between.
+		$stop    = count( $textarr );// Loop stuff.
 
-		// Ignore proessing of specific tags
+		// 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 ) ) {
+			// 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 it's not a tag and not in ignore block.
 			if ( '' == $ignore_block_element && strlen( $content ) > 0 && '<' != $content[0] ) {
 				$content = preg_replace_callback( $wp_smiliessearch, 'translate_smiley', $content );
 			}
 
-			// did we exit ignore block
+			// Did we exit ignore block.
 			if ( '' != $ignore_block_element && '</' . $ignore_block_element . '>' == $content ) {
 				$ignore_block_element = '';
 			}
@@ -3184,7 +3184,7 @@ function convert_smilies( $text ) {
 			$output .= $content;
 		}
 	} else {
-		// return default text.
+		// Return default text.
 		$output = $text;
 	}
 	return $output;
diff --git tests/phpunit/tests/formatting/Smilies.php tests/phpunit/tests/formatting/Smilies.php
index d1fd3af..114fd04 100644
--- tests/phpunit/tests/formatting/Smilies.php
+++ tests/phpunit/tests/formatting/Smilies.php
@@ -194,6 +194,25 @@ class Tests_Formatting_Smilies extends WP_UnitTestCase {
 	}
 
 	/**
+	 * Conversion of Smilies should be ignored in pre-determined tags
+	 * (pre, code, script, style and textarea) with attributes.
+	 *
+	 * @ticket 44278
+	 * @dataProvider get_smilies_ignore_tags
+	 */
+	public function test_smilies_in_tags_with_attributes_should_be_ignored( $element ) {
+		update_option( 'use_smilies', 1 );
+		smilies_init();
+
+		$expected = "<$element class=\"test\">:grin: :)</$element>";
+		$actual   = convert_smilies( $expected );
+
+		update_option( 'use_smilies', 0 );
+
+		$this->assertSame( $expected, $actual );
+	}
+
+	/**
 	 * Validate Combinations of Smilies separated by single space
 	 * are converted correctly
 	 *
