wp_specialchars_decode() – Converts a number of HTML entities into their special characters.

You appear to be a bot. Output may be restricted

Description

Converts a number of HTML entities into their special characters.

Specifically deals with: `&`, `<`, `>`, `"`, and `'`. $quote_style can be set to ENT_COMPAT to decode " entities, or ENT_QUOTES to do both " and `'`. Default is ENT_NOQUOTES where no quotes are decoded.

Usage

$string = wp_specialchars_decode( $string, $quote_style );

Parameters

$string
( string ) required – The text which is to be decoded.
$quote_style
( string|int ) optional default: ENT_NOQUOTES – Optional. Converts double quotes if set to ENT_COMPAT, both single and double if set to ENT_QUOTES or none if set to ENT_NOQUOTES. Also compatible with old _wp_specialchars() values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.

Returns

string The decoded text without HTML entities.

Source

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

1 to 73 of 73
function wp_specialchars_decode( $string, $quote_style = ENT_NOQUOTES ) {
  $string = (string) $string;

  if ( 0 === strlen( $string ) ) {
    return '';
  }

  // Don't bother if there are no entities - saves a lot of processing.
  if ( strpos( $string, '&' ) === false ) {
    return $string;
  }

  // Match the previous behaviour of _wp_specialchars() when the $quote_style is not an accepted value.
  if ( empty( $quote_style ) ) {
    $quote_style = ENT_NOQUOTES;
  } elseif ( ! in_array( $quote_style, array( 0, 2, 3, 'single', 'double' ), true ) ) {
    $quote_style = ENT_QUOTES;
  }

  // More complete than get_html_translation_table( HTML_SPECIALCHARS ).
  $single      = array(
    '&#039;' => '\'',
    '&#x27;' => '\'',
  );
  $single_preg = array(
    '/&#0*39;/'   => '&#039;',
    '/&#x0*27;/i' => '&#x27;',
  );
  $double      = array(
    '&quot;' => '"',
    '&#034;' => '"',
    '&#x22;' => '"',
  );
  $double_preg = array(
    '/&#0*34;/'   => '&#034;',
    '/&#x0*22;/i' => '&#x22;',
  );
  $others      = array(
    '&lt;'   => '<',
    '&#060;' => '<',
    '&gt;'   => '>',
    '&#062;' => '>',
    '&amp;'  => '&',
    '&#038;' => '&',
    '&#x26;' => '&',
  );
  $others_preg = array(
    '/&#0*60;/'   => '&#060;',
    '/&#0*62;/'   => '&#062;',
    '/&#0*38;/'   => '&#038;',
    '/&#x0*26;/i' => '&#x26;',
  );

  if ( ENT_QUOTES === $quote_style ) {
    $translation      = array_merge( $single, $double, $others );
    $translation_preg = array_merge( $single_preg, $double_preg, $others_preg );
  } elseif ( ENT_COMPAT === $quote_style || 'double' === $quote_style ) {
    $translation      = array_merge( $double, $others );
    $translation_preg = array_merge( $double_preg, $others_preg );
  } elseif ( 'single' === $quote_style ) {
    $translation      = array_merge( $single, $others );
    $translation_preg = array_merge( $single_preg, $others_preg );
  } elseif ( ENT_NOQUOTES === $quote_style ) {
    $translation      = $others;
    $translation_preg = $others_preg;
  }

  // Remove zero padding on numeric entities.
  $string = preg_replace( array_keys( $translation_preg ), array_values( $translation_preg ), $string );

  // Replace characters according to translation table.
  return strtr( $string, $translation );
}
 

 View on GitHub View on Trac