*
* Code within certain html blocks are skipped.
*
+ * Do not use this function before the 'init' action hook; everything will break.
+ *
* @since 0.71
- * @uses $wp_cockneyreplace Array of formatted entities for certain common phrases
+ *
+ * @global array $wp_cockneyreplace Array of formatted entities for certain common phrases
+ * @global array $shortcode_tags
+ * @staticvar array $static_characters
+ * @staticvar array $static_replacements
+ * @staticvar array $dynamic_characters
+ * @staticvar array $dynamic_replacements
+ * @staticvar array $default_no_texturize_tags
+ * @staticvar array $default_no_texturize_shortcodes
+ * @staticvar bool $run_texturize
*
* @param string $text The text to be formatted
- * @param bool $reset Set to true for unit testing. Translated patterns will reset.
+ * @param bool $reset Set to true for unit testing. Translated patterns will reset.
* @return string The string replaced with html entities
*/
-function wptexturize($text, $reset = false) {
+function wptexturize( $text, $reset = false ) {
global $wp_cockneyreplace, $shortcode_tags;
- static $static_characters, $static_replacements, $dynamic_characters, $dynamic_replacements,
- $default_no_texturize_tags, $default_no_texturize_shortcodes, $run_texturize = true;
+ static $static_characters = null,
+ $static_replacements = null,
+ $dynamic_characters = null,
+ $dynamic_replacements = null,
+ $default_no_texturize_tags = null,
+ $default_no_texturize_shortcodes = null,
+ $run_texturize = true,
+ $apos = null,
+ $prime = null,
+ $double_prime = null,
+ $opening_quote = null,
+ $closing_quote = null,
+ $opening_single_quote = null,
+ $closing_single_quote = null,
+ $open_q_flag = '<!--oq-->',
+ $open_sq_flag = '<!--osq-->',
+ $apos_flag = '<!--apos-->';
// If there's nothing to do, just stop.
if ( empty( $text ) || false === $run_texturize ) {
if ( isset($wp_cockneyreplace) ) {
$cockney = array_keys( $wp_cockneyreplace );
$cockneyreplace = array_values( $wp_cockneyreplace );
- } elseif ( "'" != $apos ) { // Only bother if we're doing a replacement.
- $cockney = array( "'tain't", "'twere", "'twas", "'tis", "'twill", "'til", "'bout", "'nuff", "'round", "'cause", "'em" );
- $cockneyreplace = array( $apos . "tain" . $apos . "t", $apos . "twere", $apos . "twas", $apos . "tis", $apos . "twill", $apos . "til", $apos . "bout", $apos . "nuff", $apos . "round", $apos . "cause", $apos . "em" );
} else {
- $cockney = $cockneyreplace = array();
+ /* translators: This is a comma-separated list of words that defy the syntax of quotations in normal use,
+ * for example... 'We do not have enough words yet' ... is a typical quoted phrase. But when we write
+ * lines of code 'til we have enough of 'em, then we need to insert apostrophes instead of quotes.
+ */
+ $cockney = explode( ',', _x( "'tain't,'twere,'twas,'tis,'twill,'til,'bout,'nuff,'round,'cause,'em",
+ 'Comma-separated list of words to texturize in your language' ) );
+
+ $cockneyreplace = explode( ',', _x( '’tain’t,’twere,’twas,’tis,’twill,’til,’bout,’nuff,’round,’cause,’em',
+ 'Comma-separated list of replacement words in your language' ) );
}
$static_characters = array_merge( array( '...', '``', '\'\'', ' (tm)' ), $cockney );
// '99' and '99" are ambiguous among other patterns; assume it's an abbreviated year at the end of a quotation.
if ( "'" !== $apos || "'" !== $closing_single_quote ) {
- $dynamic[ '/\'(\d\d)\'(?=\Z|[.,)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_single_quote;
+ $dynamic[ '/\'(\d\d)\'(?=\Z|[.,:;!?)}\-\]]|>|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_single_quote;
}
if ( "'" !== $apos || '"' !== $closing_quote ) {
- $dynamic[ '/\'(\d\d)"(?=\Z|[.,)}\-\]]|>|' . $spaces . ')/' ] = $apos . '$1' . $closing_quote;
+ $dynamic[ '/\'(\d\d)"(?=\Z|[.,:;!?)}\-\]]|>|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_quote;
}
// '99 '99s '99's (apostrophe) But never '9 or '99% or '999 or '99.0.
if ( "'" !== $apos ) {
- $dynamic[ '/\'(?=\d\d(?:\Z|(?![%\d]|[.,]\d)))/' ] = $apos;
+ $dynamic[ '/\'(?=\d\d(?:\Z|(?![%\d]|[.,]\d)))/' ] = $apos_flag;
}
// Quoted Numbers like '0.42'
if ( "'" !== $opening_single_quote && "'" !== $closing_single_quote ) {
- $dynamic[ '/(?<=\A|' . $spaces . ')\'(\d[.,\d]*)\'/' ] = $opening_single_quote . '$1' . $closing_single_quote;
+ $dynamic[ '/(?<=\A|' . $spaces . ')\'(\d[.,\d]*)\'/' ] = $open_sq_flag . '$1' . $closing_single_quote;
}
// Single quote at start, or preceded by (, {, <, [, ", -, or spaces.
if ( "'" !== $opening_single_quote ) {
- $dynamic[ '/(?<=\A|[([{"\-]|<|' . $spaces . ')\'/' ] = $opening_single_quote;
+ $dynamic[ '/(?<=\A|[([{"\-]|<|' . $spaces . ')\'/' ] = $open_sq_flag;
}
// Apostrophe in a word. No spaces, double apostrophes, or other punctuation.
if ( "'" !== $apos ) {
- $dynamic[ '/(?<!' . $spaces . ')\'(?!\Z|[.,:;"\'(){}[\]\-]|&[lg]t;|' . $spaces . ')/' ] = $apos;
- }
-
- // 9' (prime)
- if ( "'" !== $prime ) {
- $dynamic[ '/(?<=\d)\'/' ] = $prime;
- }
-
- // Single quotes followed by spaces or ending punctuation.
- if ( "'" !== $closing_single_quote ) {
- $dynamic[ '/\'(?=\Z|[.,)}\-\]]|>|' . $spaces . ')/' ] = $closing_single_quote;
+ $dynamic[ '/(?<!' . $spaces . ')\'(?!\Z|[.,:;!?"\'(){}[\]\-]|&[lg]t;|' . $spaces . ')/' ] = $apos_flag;
}
$dynamic_characters['apos'] = array_keys( $dynamic );
// Quoted Numbers like "42"
if ( '"' !== $opening_quote && '"' !== $closing_quote ) {
- $dynamic[ '/(?<=\A|' . $spaces . ')"(\d[.,\d]*)"/' ] = $opening_quote . '$1' . $closing_quote;
- }
-
- // 9" (double prime)
- if ( '"' !== $double_prime ) {
- $dynamic[ '/(?<=\d)"/' ] = $double_prime;
+ $dynamic[ '/(?<=\A|' . $spaces . ')"(\d[.,\d]*)"/' ] = $open_q_flag . '$1' . $closing_quote;
}
// Double quote at start, or preceded by (, {, <, [, -, or spaces, and not followed by spaces.
if ( '"' !== $opening_quote ) {
- $dynamic[ '/(?<=\A|[([{\-]|<|' . $spaces . ')"(?!' . $spaces . ')/' ] = $opening_quote;
- }
-
- // Any remaining double quotes.
- if ( '"' !== $closing_quote ) {
- $dynamic[ '/"/' ] = $closing_quote;
+ $dynamic[ '/(?<=\A|[([{\-]|<|' . $spaces . ')"(?!' . $spaces . ')/' ] = $open_q_flag;
}
$dynamic_characters['quote'] = array_keys( $dynamic );
if ( false !== strpos( $curl, "'" ) ) {
$curl = preg_replace( $dynamic_characters['apos'], $dynamic_replacements['apos'], $curl );
+ $curl = wptexturize_primes( $curl, "'", $prime, $open_sq_flag, $closing_single_quote );
+ $curl = str_replace( $apos_flag, $apos, $curl );
+ $curl = str_replace( $open_sq_flag, $opening_single_quote, $curl );
}
if ( false !== strpos( $curl, '"' ) ) {
$curl = preg_replace( $dynamic_characters['quote'], $dynamic_replacements['quote'], $curl );
+ $curl = wptexturize_primes( $curl, '"', $double_prime, $open_q_flag, $closing_quote );
+ $curl = str_replace( $open_q_flag, $opening_quote, $curl );
}
if ( false !== strpos( $curl, '-' ) ) {
$curl = preg_replace( $dynamic_characters['dash'], $dynamic_replacements['dash'], $curl );
$text = implode( '', $textarr );
// Replace each & with & unless it already looks like an entity.
- $text = preg_replace('/&(?!#(?:\d+|x[a-f0-9]+);|[a-z1-4]{1,8};)/i', '&', $text);
+ return preg_replace( '/&(?!#(?:\d+|x[a-f0-9]+);|[a-z1-4]{1,8};)/i', '&', $text );
+}
- return $text;
+/**
+ * Implements a logic tree to determine whether or not "7'." represents seven feet,
+ * then converts the special char into either a prime char or a closing quote char.
+ *
+ * @since 4.3.0
+ *
+ * @param string $haystack The plain text to be searched.
+ * @param string $needle The character to search for such as ' or ".
+ * @param string $prime The prime char to use for replacement.
+ * @param string $open_quote The opening quote char. Opening quote replacement must be
+ * accomplished already.
+ * @param string $close_quote The closing quote char to use for replacement.
+ * @return string The $haystack value after primes and quotes replacements.
+ */
+function wptexturize_primes( $haystack, $needle, $prime, $open_quote, $close_quote ) {
+ $spaces = wp_spaces_regexp();
+ $flag = '<!--wp-prime-or-quote-->';
+ $quote_pattern = "/$needle(?=\\Z|[.,:;!?)}\\-\\]]|>|" . $spaces . ")/";
+ $prime_pattern = "/(?<=\\d)$needle/";
+ $flag_after_digit = "/(?<=\\d)$flag/";
+ $flag_no_digit = "/(?<!\\d)$flag/";
+
+ $sentences = explode( $open_quote, $haystack );
+
+ foreach( $sentences as $key => &$sentence ) {
+ if ( false === strpos( $sentence, $needle ) ) {
+ continue;
+ } elseif ( 0 !== $key && 0 === substr_count( $sentence, $close_quote ) ) {
+ $sentence = preg_replace( $quote_pattern, $flag, $sentence, -1, $count );
+ if ( $count > 1 ) {
+ // This sentence appears to have multiple closing quotes. Attempt Vulcan logic.
+ $sentence = preg_replace( $flag_no_digit, $close_quote, $sentence, -1, $count2 );
+ if ( 0 === $count2 ) {
+ // Try looking for a quote followed by a period.
+ $count2 = substr_count( $sentence, "$flag." );
+ if ( $count2 > 0 ) {
+ // Assume the rightmost quote-period match is the end of quotation.
+ $pos = strrpos( $sentence, "$flag." );
+ } else {
+ // When all else fails, make the rightmost candidate a closing quote.
+ // This is most likely to be problematic in the context of bug #18549.
+ $pos = strrpos( $sentence, $flag );
+ }
+ $sentence = substr_replace( $sentence, $close_quote, $pos, strlen( $flag ) );
+ }
+ // Use conventional replacement on any remaining primes and quotes.
+ $sentence = preg_replace( $prime_pattern, $prime, $sentence );
+ $sentence = preg_replace( $flag_after_digit, $prime, $sentence );
+ $sentence = str_replace( $flag, $close_quote, $sentence );
+ } elseif ( 1 == $count ) {
+ // Found only one closing quote candidate, so give it priority over primes.
+ $sentence = str_replace( $flag, $close_quote, $sentence );
+ $sentence = preg_replace( $prime_pattern, $prime, $sentence );
+ } else {
+ // No closing quotes found. Just run primes pattern.
+ $sentence = preg_replace( $prime_pattern, $prime, $sentence );
+ }
+ } else {
+ $sentence = preg_replace( $prime_pattern, $prime, $sentence );
+ $sentence = preg_replace( $quote_pattern, $close_quote, $sentence );
+ }
+ if ( '"' == $needle && false !== strpos( $sentence, '"' ) ) {
+ $sentence = str_replace( '"', $close_quote, $sentence );
+ }
+ }
+
+ return implode( $open_quote, $sentences );
}
/**
* @access private
*
* @param string $text Text to check. Must be a tag like `<html>` or `[shortcode]`.
- * @param array $stack List of open tag elements.
- * @param array $disabled_elements The tag names to match against. Spaces are not allowed in tag names.
+ * @param array $stack List of open tag elements.
+ * @param array $disabled_elements The tag names to match against. Spaces are not allowed in tag names.
*/
-function _wptexturize_pushpop_element($text, &$stack, $disabled_elements) {
+function _wptexturize_pushpop_element( $text, &$stack, $disabled_elements ) {
// Is it an opening tag or closing tag?
if ( '/' !== $text[1] ) {
$opening_tag = true;
* after paragraphing. Default true.
* @return string Text which has been converted into correct paragraph tags.
*/
-function wpautop($pee, $br = true) {
+function wpautop( $pee, $br = true ) {
$pre_tags = array();
if ( trim($pee) === '' )
$pee .= $last_pee;
}
// Change multiple <br>s into two line breaks, which will turn into paragraphs.
- $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
+ $pee = preg_replace('|<br\s*/?>\s*<br\s*/?>|', "\n\n", $pee);
$allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|legend|section|article|aside|hgroup|header|footer|nav|figure|figcaption|details|menu|summary)';
}
// Under certain strange conditions it could create a P of entirely whitespace.
- $pee = preg_replace('|<p>\s*</p>|', '', $pee);
+ $pee = preg_replace('|<p>\s*</p>|', '', $pee);
// Add a closing <p> inside <div>, <address>, or <form> tag if missing.
$pee = preg_replace('!<p>([^<]+)</(div|address|form)>!', "<p>$1</p></$2>", $pee);
-
+
// If an opening or closing block element tag is wrapped in a <p>, unwrap it.
- $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
-
+ $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
+
// In some cases <li> may get wrapped in <p>, fix them.
- $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee);
-
+ $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee);
+
// If a <blockquote> is wrapped with a <p>, move it inside the <blockquote>.
$pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
$pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
-
+
// If an opening or closing block element tag is preceded by an opening <p> tag, remove it.
$pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
-
+
// If an opening or closing block element tag is followed by a closing <p> tag, remove it.
$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
// Replace newlines that shouldn't be touched with a placeholder.
$pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', '_autop_newline_preservation_helper', $pee);
+ // Normalize <br>
+ $pee = str_replace( array( '<br>', '<br/>' ), '<br />', $pee );
+
// Replace any new line characters that aren't preceded by a <br /> with a <br />.
- $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee);
+ $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee);
// Replace newline placeholders with newlines.
$pee = str_replace('<WPPreserveNewline />', "\n", $pee);
// If a <br /> tag is after an opening or closing block tag, remove it.
$pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
-
+
// If a <br /> tag is before a subset of opening or closing block tags, remove it.
$pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
$pee = preg_replace( "|\n</p>$|", '</p>', $pee );
foreach ( $replace_pairs as $needle => $replace );
// Loop through delimeters (elements) only.
- for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
+ for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
if ( false !== strpos( $textarr[$i], $needle ) ) {
$textarr[$i] = str_replace( $needle, $replace, $textarr[$i] );
$changed = true;
$needles = array_keys( $replace_pairs );
// Loop through delimeters (elements) only.
- for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
+ for ( $i = 1, $c = count( $textarr ); $i < $c; $i += 2 ) {
foreach ( $needles as $needle ) {
if ( false !== strpos( $textarr[$i], $needle ) ) {
$textarr[$i] = strtr( $textarr[$i], $replace_pairs );
* @return string
*/
function _autop_newline_preservation_helper( $matches ) {
- return str_replace("\n", "<WPPreserveNewline />", $matches[0]);
+ return str_replace( "\n", "<WPPreserveNewline />", $matches[0] );
}
/**
*
* @since 2.9.0
*
+ * @global array $shortcode_tags
+ *
* @param string $pee The content.
* @return string The filtered content.
*/
* @param string $str The string to be checked
* @return bool True if $str fits a UTF-8 model, false otherwise.
*/
-function seems_utf8($str) {
+function seems_utf8( $str ) {
mbstring_binary_safe_encoding();
$length = strlen($str);
reset_mbstring_encoding();
* @since 1.2.2
* @access private
*
- * @param string $string The text which is to be encoded.
- * @param int $quote_style 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 values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.
- * @param string $charset Optional. The character encoding of the string. Default is false.
- * @param boolean $double_encode Optional. Whether to encode existing html entities. Default is false.
+ * @staticvar string $_charset
+ *
+ * @param string $string The text which is to be encoded.
+ * @param int $quote_style 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 values; converting single quotes if set to 'single', double if set to 'double' or both if otherwise set. Default is ENT_NOQUOTES.
+ * @param string $charset Optional. The character encoding of the string. Default is false.
+ * @param bool $double_encode Optional. Whether to encode existing html entities. Default is false.
* @return string The encoded text with HTML entities.
*/
function _wp_specialchars( $string, $quote_style = ENT_NOQUOTES, $charset = false, $double_encode = false ) {
// Store the site charset as a static to avoid multiple calls to wp_load_alloptions()
if ( ! $charset ) {
- static $_charset;
+ static $_charset = null;
if ( ! isset( $_charset ) ) {
$alloptions = wp_load_alloptions();
$_charset = isset( $alloptions['blog_charset'] ) ? $alloptions['blog_charset'] : '';
$quote_style = ENT_NOQUOTES;
}
- // Handle double encoding ourselves
- if ( $double_encode ) {
- $string = @htmlspecialchars( $string, $quote_style, $charset );
- } else {
- // Decode & into &
- $string = wp_specialchars_decode( $string, $_quote_style );
-
- // Guarantee every &entity; is valid or re-encode the &
+ if ( ! $double_encode ) {
+ // Guarantee every &entity; is valid, convert &garbage; into &garbage;
+ // This is required for PHP < 5.4.0 because ENT_HTML401 flag is unavailable.
$string = wp_kses_normalize_entities( $string );
-
- // Now re-encode everything except &entity;
- $string = preg_split( '/(&#?x?[0-9a-z]+;)/i', $string, -1, PREG_SPLIT_DELIM_CAPTURE );
-
- for ( $i = 0, $c = count( $string ); $i < $c; $i += 2 ) {
- $string[$i] = @htmlspecialchars( $string[$i], $quote_style, $charset );
- }
- $string = implode( '', $string );
}
+ $string = @htmlspecialchars( $string, $quote_style, $charset, $double_encode );
+
// Backwards compatibility
if ( 'single' === $_quote_style )
$string = str_replace( "'", ''', $string );
*
* @since 2.8.0
*
- * @param string $string The text which is to be decoded.
- * @param mixed $quote_style 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.
+ * @param string $string The text which is to be decoded.
+ * @param string|int $quote_style 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.
* @return string The decoded text without HTML entities.
*/
function wp_specialchars_decode( $string, $quote_style = ENT_NOQUOTES ) {
*
* @since 2.8.0
*
- * @param string $string The text which is to be checked.
- * @param boolean $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false.
+ * @staticvar bool $is_utf8
+ * @staticvar bool $utf8_pcre
+ *
+ * @param string $string The text which is to be checked.
+ * @param bool $strip Optional. Whether to attempt to strip out invalid UTF8. Default is false.
* @return string The checked text.
*/
function wp_check_invalid_utf8( $string, $strip = false ) {
}
// Store the site charset as a static to avoid multiple calls to get_option()
- static $is_utf8;
- if ( !isset( $is_utf8 ) ) {
+ static $is_utf8 = null;
+ if ( ! isset( $is_utf8 ) ) {
$is_utf8 = in_array( get_option( 'blog_charset' ), array( 'utf8', 'utf-8', 'UTF8', 'UTF-8' ) );
}
- if ( !$is_utf8 ) {
+ if ( ! $is_utf8 ) {
return $string;
}
// Check for support for utf8 in the installed PCRE library once and store the result in a static
- static $utf8_pcre;
- if ( !isset( $utf8_pcre ) ) {
+ static $utf8_pcre = null;
+ if ( ! isset( $utf8_pcre ) ) {
$utf8_pcre = @preg_match( '/^./u', 'a' );
}
// We can't demand utf8 in the PCRE installation, so just return the string in those cases
* @since 1.5.0
*
* @param string $utf8_string
- * @param int $length Max length of the string
+ * @param int $length Max length of the string
* @return string String with Unicode encoded for URI.
*/
function utf8_uri_encode( $utf8_string, $length = 0 ) {
* @param string $string Text that might have accent characters
* @return string Filtered string with replaced "nice" characters.
*/
-function remove_accents($string) {
+function remove_accents( $string ) {
if ( !preg_match('/[\x80-\xff]/', $string) )
return $string;
// Used for locale-specific rules
$locale = get_locale();
- if ( 'de_DE' == $locale ) {
+ if ( 'de_DE' == $locale || 'de_DE_formal' == $locale ) {
$chars[ chr(195).chr(132) ] = 'Ae';
$chars[ chr(195).chr(164) ] = 'ae';
$chars[ chr(195).chr(150) ] = 'Oe';
* @since 2.0.0
*
* @param string $username The username to be sanitized.
- * @param bool $strict If set limits $username to specific characters. Default false.
+ * @param bool $strict If set limits $username to specific characters. Default false.
* @return string The sanitized username, after passing through filters.
*/
function sanitize_user( $username, $strict = false ) {
*
* @since 1.0.0
*
- * @param string $title The string to be sanitized.
+ * @param string $title The string to be sanitized.
* @param string $fallback_title Optional. A title to use if $title is empty.
- * @param string $context Optional. The operation for which the string is sanitized
+ * @param string $context Optional. The operation for which the string is sanitized
* @return string The sanitized string.
*/
function sanitize_title( $title, $fallback_title = '', $context = 'save' ) {
*
* @since 1.2.0
*
- * @param string $title The title to be sanitized.
+ * @param string $title The title to be sanitized.
* @param string $raw_title Optional. Not used.
- * @param string $context Optional. The operation for which the string is sanitized.
+ * @param string $context Optional. The operation for which the string is sanitized.
* @return string The sanitized title.
*/
function sanitize_title_with_dashes( $title, $raw_title = '', $context = 'display' ) {
* @since 2.5.1
*
* @param string $orderby Order by clause to be validated.
- * @return string|bool Returns $orderby if valid, false otherwise.
+ * @return string|false Returns $orderby if valid, false otherwise.
*/
function sanitize_sql_orderby( $orderby ) {
if ( preg_match( '/^\s*(([a-z0-9_]+|`[a-z0-9_]+`)(\s+(ASC|DESC))?\s*(,\s*(?=[a-z0-9_`])|$))+$/i', $orderby ) || preg_match( '/^\s*RAND\(\s*\)\s*$/i', $orderby ) ) {
*
* @since 2.8.0
*
- * @param string $class The classname to be sanitized
+ * @param string $class The classname to be sanitized
* @param string $fallback Optional. The value to return if the sanitization ends up as an empty string.
* Defaults to an empty string.
* @return string The sanitized value
}
/**
- * Converts a number of characters from a string.
- *
- * Metadata tags `<title>` and `<category>` are removed, `<br>` and `<hr>` are
- * converted into correct XHTML and Unicode characters are converted to the
- * valid range.
+ * Converts lone & characters into `&` (a.k.a. `&`)
*
* @since 0.71
*
- * @param string $content String of characters to be converted.
+ * @param string $content String of characters to be converted.
* @param string $deprecated Not used.
* @return string Converted string.
*/
-function convert_chars($content, $deprecated = '') {
- if ( !empty( $deprecated ) )
+function convert_chars( $content, $deprecated = '' ) {
+ if ( ! empty( $deprecated ) ) {
_deprecated_argument( __FUNCTION__, '0.71' );
+ }
- // Translation of invalid Unicode references range to valid range
- $wp_htmltranswinuni = array(
- '€' => '€', // the Euro sign
- '' => '',
- '‚' => '‚', // these are Windows CP1252 specific characters
- 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers
- '„' => '„',
- '…' => '…',
- '†' => '†',
- '‡' => '‡',
- 'ˆ' => 'ˆ',
- '‰' => '‰',
- 'Š' => 'Š',
- '‹' => '‹',
- 'Œ' => 'Œ',
- '' => '',
- 'Ž' => 'Ž',
- '' => '',
- '' => '',
- '‘' => '‘',
- '’' => '’',
- '“' => '“',
- '”' => '”',
- '•' => '•',
- '–' => '–',
- '—' => '—',
- '˜' => '˜',
- '™' => '™',
- 'š' => 'š',
- '›' => '›',
- 'œ' => 'œ',
- '' => '',
- 'ž' => 'ž',
- 'Ÿ' => 'Ÿ'
- );
-
- // Remove metadata tags
- $content = preg_replace('/<title>(.+?)<\/title>/','',$content);
- $content = preg_replace('/<category>(.+?)<\/category>/','',$content);
+ if ( strpos( $content, '&' ) !== false ) {
+ $content = preg_replace( '/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content );
+ }
- // Converts lone & characters into & (a.k.a. &)
- $content = preg_replace('/&([^#])(?![a-z1-4]{1,8};)/i', '&$1', $content);
+ return $content;
+}
- // Fix Word pasting
- $content = strtr($content, $wp_htmltranswinuni);
+/**
+ * Converts invalid Unicode references range to valid range.
+ *
+ * @since 4.3.0
+ *
+ * @param string $content String with entities that need converting.
+ * @return string Converted string.
+ */
+function convert_invalid_entities( $content ) {
+ $wp_htmltranswinuni = array(
+ '€' => '€', // the Euro sign
+ '' => '',
+ '‚' => '‚', // these are Windows CP1252 specific characters
+ 'ƒ' => 'ƒ', // they would look weird on non-Windows browsers
+ '„' => '„',
+ '…' => '…',
+ '†' => '†',
+ '‡' => '‡',
+ 'ˆ' => 'ˆ',
+ '‰' => '‰',
+ 'Š' => 'Š',
+ '‹' => '‹',
+ 'Œ' => 'Œ',
+ '' => '',
+ 'Ž' => 'Ž',
+ '' => '',
+ '' => '',
+ '‘' => '‘',
+ '’' => '’',
+ '“' => '“',
+ '”' => '”',
+ '•' => '•',
+ '–' => '–',
+ '—' => '—',
+ '˜' => '˜',
+ '™' => '™',
+ 'š' => 'š',
+ '›' => '›',
+ 'œ' => 'œ',
+ '' => '',
+ 'ž' => 'ž',
+ 'Ÿ' => 'Ÿ'
+ );
- // Just a little XHTML help
- $content = str_replace('<br>', '<br />', $content);
- $content = str_replace('<hr>', '<hr />', $content);
+ if ( strpos( $content, '' ) !== false ) {
+ $content = strtr( $content, $wp_htmltranswinuni );
+ }
return $content;
}
*
* @since 0.71
*
- * @param string $text Text to be balanced
- * @param bool $force If true, forces balancing, ignoring the value of the option. Default false.
+ * @param string $text Text to be balanced
+ * @param bool $force If true, forces balancing, ignoring the value of the option. Default false.
* @return string Balanced text
*/
function balanceTags( $text, $force = false ) {
if ( isset($regex[1][0]) && '/' == $regex[1][0] ) { // End Tag
$tag = strtolower(substr($regex[1],1));
// if too many closing tags
- if( $stacksize <= 0 ) {
+ if ( $stacksize <= 0 ) {
$tag = '';
// or close to be safe $tag = '/' . $tag;
}
// Attributes
$attributes = $regex[2];
- if( ! empty( $attributes ) && $attributes[0] != '>' )
+ if ( ! empty( $attributes ) && $attributes[0] != '>' )
$attributes = ' ' . $attributes;
$tag = '<' . $tag . $attributes . '>';
*
* @since 0.71
*
- * @param string $content The text about to be edited.
- * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed).
+ * @param string $content The text about to be edited.
+ * @param bool $richedit Whether the $content should not pass through htmlspecialchars(). Default false (meaning it will be passed).
* @return string The text after the filter (and possibly htmlspecialchars()) has been run.
*/
function format_to_edit( $content, $richedit = false ) {
*
* @since 0.71
*
- * @param mixed $number Number to append zeros to if not greater than threshold.
- * @param int $threshold Digit places number needs to be to not have zeros added.
+ * @param int $number Number to append zeros to if not greater than threshold.
+ * @param int $threshold Digit places number needs to be to not have zeros added.
* @return string Adds leading zeros to number if needed.
*/
-function zeroise($number, $threshold) {
- return sprintf('%0'.$threshold.'s', $number);
+function zeroise( $number, $threshold ) {
+ return sprintf( '%0' . $threshold . 's', $number );
}
/**
* @param string $string Value to which backslashes will be added.
* @return string String with backslashes inserted.
*/
-function backslashit($string) {
+function backslashit( $string ) {
if ( isset( $string[0] ) && $string[0] >= '0' && $string[0] <= '9' )
$string = '\\\\' . $string;
return addcslashes( $string, 'A..Za..z' );
* @param mixed $value The value to be stripped.
* @return mixed Stripped value.
*/
-function stripslashes_deep($value) {
+function stripslashes_deep( $value ) {
if ( is_array($value) ) {
$value = array_map('stripslashes_deep', $value);
} elseif ( is_object($value) ) {
* @param array|string $value The array or string to be encoded.
* @return array|string $value The encoded array (or string from the callback).
*/
-function urlencode_deep($value) {
- $value = is_array($value) ? array_map('urlencode_deep', $value) : urlencode($value);
- return $value;
+function urlencode_deep( $value ) {
+ return is_array( $value ) ? array_map( 'urlencode_deep', $value ) : urlencode( $value );
}
/**
* @since 0.71
*
* @param string $email_address Email address.
- * @param int $hex_encoding Optional. Set to 1 to enable hex encoding.
+ * @param int $hex_encoding Optional. Set to 1 to enable hex encoding.
* @return string Converted email address.
*/
function antispambot( $email_address, $hex_encoding = 0 ) {
}
}
- $email_no_spam_address = str_replace( '@', '@', $email_no_spam_address );
-
- return $email_no_spam_address;
+ return str_replace( '@', '@', $email_no_spam_address );
}
/**
* @param array $matches Single Regex Match.
* @return string HTML A element with URI address.
*/
-function _make_url_clickable_cb($matches) {
+function _make_url_clickable_cb( $matches ) {
$url = $matches[2];
if ( ')' == $matches[3] && strpos( $url, '(' ) ) {
* @param array $matches Single Regex Match.
* @return string HTML A element with URL address.
*/
-function _make_web_ftp_clickable_cb($matches) {
+function _make_web_ftp_clickable_cb( $matches ) {
$ret = '';
$dest = $matches[2];
$dest = 'http://' . $dest;
* @param array $matches Single Regex Match.
* @return string HTML A element with email address.
*/
-function _make_email_clickable_cb($matches) {
+function _make_email_clickable_cb( $matches ) {
$email = $matches[2] . '@' . $matches[3];
return $matches[1] . "<a href=\"mailto:$email\">$email</a>";
}
}
// Cleanup of accidental links within links
- $r = preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
- return $r;
+ return preg_replace( '#(<a([ \r\n\t]+[^>]+?>|>))<a [^>]+?>([^>]+?)</a></a>#i', "$1$3</a>", $r );
}
/**
* @access private
*
* @param string $string The string to split.
- * @param int $goal The desired chunk length.
+ * @param int $goal The desired chunk length.
* @return array Numeric array of chunks.
*/
function _split_str_by_whitespace( $string, $goal ) {
// This is a pre save filter, so text is already escaped.
$text = stripslashes($text);
$text = preg_replace_callback('|<a (.+?)>|i', 'wp_rel_nofollow_callback', $text);
- $text = wp_slash($text);
- return $text;
+ return wp_slash( $text );
}
/**
* Looks up one smiley code in the $wpsmiliestrans global array and returns an
* `<img>` string for that smiley.
*
- * @global array $wpsmiliestrans
* @since 2.8.0
*
+ * @global array $wpsmiliestrans
+ *
* @param array $matches Single match. Smiley code to convert to image.
* @return string Image string for smiley.
*/
* used in the function isn't empty.
*
* @since 0.71
- * @uses $wp_smiliessearch
+ *
+ * @global string|array $wp_smiliessearch
*
* @param string $text Content to convert smilies from text.
* @return string Converted content with text smilies replaced with images.
*
* @since 0.71
*
- * @param string $email Email address to verify.
- * @param boolean $deprecated Deprecated.
+ * @param string $email Email address to verify.
+ * @param bool $deprecated Deprecated.
* @return string|bool Either false or the valid email address.
*/
function is_email( $email, $deprecated = false ) {
* @param string $string Subject line
* @return string Converted string to ASCII
*/
-function wp_iso_descrambler($string) {
+function wp_iso_descrambler( $string ) {
/* this may only work with iso-8859-1, I'm afraid */
if (!preg_match('#\=\?(.+)\?Q\?(.+)\?\=#i', $string, $matches)) {
return $string;
} else {
$subject = str_replace('_', ' ', $matches[2]);
- $subject = preg_replace_callback('#\=([0-9a-f]{2})#i', '_wp_iso_convert', $subject);
- return $subject;
+ return preg_replace_callback( '#\=([0-9a-f]{2})#i', '_wp_iso_convert', $subject );
}
}
* @param string $timezone Either 'Z' for 0 offset or '±hhmm'.
* @return int|float The offset in seconds.
*/
-function iso8601_timezone_to_offset($timezone) {
+function iso8601_timezone_to_offset( $timezone ) {
// $timezone is either 'Z' or '[+|-]hhmm'
if ($timezone == 'Z') {
$offset = 0;
* @since 1.5.0
*
* @param string $date_string Date and time in ISO 8601 format {@link http://en.wikipedia.org/wiki/ISO_8601}.
- * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'.
+ * @param string $timezone Optional. If set to GMT returns the time minus gmt_offset. Default is 'user'.
* @return string The date and time in MySQL DateTime format - Y-m-d H:i:s.
*/
-function iso8601_to_datetime($date_string, $timezone = 'user') {
+function iso8601_to_datetime( $date_string, $timezone = 'user' ) {
$timezone = strtolower($timezone);
if ($timezone == 'gmt') {
* @param string $text Content to replace links to open in a new window.
* @return string Content that has filtered links.
*/
-function popuplinks($text) {
+function popuplinks( $text ) {
$text = preg_replace('/<a (.+?)>/i', "<a $1 target='_blank' rel='external'>", $text);
return $text;
}
* @since 1.5.0
*
* @param int $from Unix timestamp from which the difference begins.
- * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set.
+ * @param int $to Optional. Unix timestamp to end the time difference. Default becomes time() if not set.
* @return string Human readable time difference.
*/
function human_time_diff( $from, $to = '' ) {
* @param string $text Optional. The excerpt. If set to empty, an excerpt is generated.
* @return string The excerpt.
*/
-function wp_trim_excerpt($text = '') {
+function wp_trim_excerpt( $text = '' ) {
$raw_excerpt = $text;
if ( '' == $text ) {
$text = get_the_content('');
*
* @since 3.3.0
*
- * @param string $text Text to trim.
- * @param int $num_words Number of words. Default 55.
- * @param string $more Optional. What to append if $text needs to be trimmed. Default '…'.
+ * @param string $text Text to trim.
+ * @param int $num_words Number of words. Default 55.
+ * @param string $more Optional. What to append if $text needs to be trimmed. Default '…'.
* @return string Trimmed text.
*/
function wp_trim_words( $text, $num_words = 55, $more = null ) {
- if ( null === $more )
+ if ( null === $more ) {
$more = __( '…' );
+ }
+
$original_text = $text;
$text = wp_strip_all_tags( $text );
- /* translators: If your word count is based on single characters (East Asian characters),
- enter 'characters'. Otherwise, enter 'words'. Do not translate into your own language. */
- if ( 'characters' == _x( 'words', 'word count: words or characters?' ) && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
+
+ /*
+ * translators: If your word count is based on single characters (e.g. East Asian characters),
+ * enter 'characters_excluding_spaces' or 'characters_including_spaces'. Otherwise, enter 'words'.
+ * Do not translate into your own language.
+ */
+ if ( strpos( _x( 'words', 'Word count type. Do not translate!' ), 'characters' ) === 0 && preg_match( '/^utf\-?8$/i', get_option( 'blog_charset' ) ) ) {
$text = trim( preg_replace( "/[\n\r\t ]+/", ' ', $text ), ' ' );
preg_match_all( '/./u', $text, $words_array );
$words_array = array_slice( $words_array[0], 0, $num_words + 1 );
$words_array = preg_split( "/[\n\r\t ]+/", $text, $num_words + 1, PREG_SPLIT_NO_EMPTY );
$sep = ' ';
}
+
if ( count( $words_array ) > $num_words ) {
array_pop( $words_array );
$text = implode( $sep, $words_array );
} else {
$text = implode( $sep, $words_array );
}
+
/**
* Filter the text content after words have been trimmed.
*
* @param string $text The text within which entities will be converted.
* @return string Text with converted entities.
*/
-function ent2ncr($text) {
+function ent2ncr( $text ) {
/**
* Filter text before named entities are converted into numbered entities.
* @param string $text The text prior to entity conversion.
*/
$filtered = apply_filters( 'pre_ent2ncr', null, $text );
- if( null !== $filtered )
+ if ( null !== $filtered )
return $filtered;
$to_ncr = array(
}
/**
- * Formats text for the rich text editor.
+ * Formats text for the editor.
*
- * The filter 'richedit_pre' is applied here. If $text is empty the filter will
- * be applied to an empty string.
+ * Generally the browsers treat everything inside a textarea as text, but
+ * it is still a good idea to HTML entity encode `<`, `>` and `&` in the content.
*
- * @since 2.0.0
+ * The filter {@see 'format_for_editor'} is applied here. If `$text` is empty the
+ * filter will be applied to an empty string.
+ *
+ * @since 4.3.0
*
* @param string $text The text to be formatted.
* @return string The formatted text after filter is applied.
*/
-function wp_richedit_pre($text) {
- if ( empty( $text ) ) {
- /**
- * Filter text returned for the rich text editor.
- *
- * This filter is first evaluated, and the value returned, if an empty string
- * is passed to wp_richedit_pre(). If an empty string is passed, it results
- * in a break tag and line feed.
- *
- * If a non-empty string is passed, the filter is evaluated on the wp_richedit_pre()
- * return after being formatted.
- *
- * @since 2.0.0
- *
- * @param string $output Text for the rich text editor.
- */
- return apply_filters( 'richedit_pre', '' );
+function format_for_editor( $text, $default_editor = null ) {
+ if ( $text ) {
+ $text = htmlspecialchars( $text, ENT_NOQUOTES, get_option( 'blog_charset' ) );
}
- $output = convert_chars($text);
- $output = wpautop($output);
- $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) );
-
- /** This filter is documented in wp-includes/formatting.php */
- return apply_filters( 'richedit_pre', $output );
-}
-
-/**
- * Formats text for the HTML editor.
- *
- * Unless $output is empty it will pass through htmlspecialchars before the
- * 'htmledit_pre' filter is applied.
- *
- * @since 2.5.0
- *
- * @param string $output The text to be formatted.
- * @return string Formatted text after filter applied.
- */
-function wp_htmledit_pre($output) {
- if ( !empty($output) )
- $output = htmlspecialchars($output, ENT_NOQUOTES, get_option( 'blog_charset' ) ); // convert only < > &
-
/**
- * Filter the text before it is formatted for the HTML editor.
+ * Filter the text after it is formatted for the editor.
*
- * @since 2.5.0
+ * @since 4.3.0
*
- * @param string $output The HTML-formatted text.
+ * @param string $text The formatted text.
*/
- return apply_filters( 'htmledit_pre', $output );
+ return apply_filters( 'format_for_editor', $text, $default_editor );
}
/**
* @since 2.8.1
* @access private
*
- * @param string|array $search The value being searched for, otherwise known as the needle. An array may be used to designate multiple needles.
- * @param string $subject The string being searched and replaced on, otherwise known as the haystack.
+ * @param string|array $search The value being searched for, otherwise known as the needle.
+ * An array may be used to designate multiple needles.
+ * @param string $subject The string being searched and replaced on, otherwise known as the haystack.
* @return string The string with the replaced svalues.
*/
function _deep_replace( $search, $subject ) {
* is preparing an array for use in an IN clause.
*
* @since 2.8.0
+ *
+ * @global wpdb $wpdb
+ *
* @param string|array $data Unescaped data
* @return string|array Escaped data
*/
*
* @since 2.8.0
*
- * @param string $url The URL to be cleaned.
- * @param array $protocols Optional. An array of acceptable protocols.
- * Defaults to 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn' if not set.
- * @param string $_context Private. Use esc_url_raw() for database usage.
+ * @param string $url The URL to be cleaned.
+ * @param array $protocols Optional. An array of acceptable protocols.
+ * Defaults to return value of wp_allowed_protocols()
+ * @param string $_context Private. Use esc_url_raw() for database usage.
* @return string The cleaned $url after the 'clean_url' filter is applied.
*/
function esc_url( $url, $protocols = null, $_context = 'display' ) {
if ( '' == $url )
return $url;
$url = preg_replace('|[^a-z0-9-~+_.?#=!&;,/:%@$\|*\'()\\x80-\\xff]|i', '', $url);
- $strip = array('%0d', '%0a', '%0D', '%0A');
- $url = _deep_replace($strip, $url);
+ if ( 0 !== stripos( $url, 'mailto:' ) ) {
+ $strip = array('%0d', '%0a', '%0D', '%0A');
+ $url = _deep_replace($strip, $url);
+ }
$url = str_replace(';//', '://', $url);
/* If the URL doesn't appear to contain a scheme, we
* presume it needs http:// appended (unless a relative
*
* @since 2.8.0
*
- * @param string $url The URL to be cleaned.
- * @param array $protocols An array of acceptable protocols.
+ * @param string $url The URL to be cleaned.
+ * @param array $protocols An array of acceptable protocols.
* @return string The cleaned URL.
*/
function esc_url_raw( $url, $protocols = null ) {
* @param string $myHTML The text to be converted.
* @return string Converted text.
*/
-function htmlentities2($myHTML) {
+function htmlentities2( $myHTML ) {
$translation_table = get_html_translation_table( HTML_ENTITIES, ENT_QUOTES );
$translation_table[chr(38)] = '&';
return preg_replace( "/&(?![A-Za-z]{0,4}\w{2,3};|#[0-9]{2,3};)/", "&", strtr($myHTML, $translation_table) );
* @param string $tag_name
* @return string
*/
-function tag_escape($tag_name) {
+function tag_escape( $tag_name ) {
$safe_tag = strtolower( preg_replace('/[^a-zA-Z0-9_:]/', '', $tag_name) );
/**
* Filter a string cleaned and escaped for output as an HTML tag.
*
* @since 2.0.5
*
+ * @global wpdb $wpdb
+ *
* @param string $option The name of the option.
- * @param string $value The unsanitised value.
+ * @param string $value The unsanitised value.
* @return string Sanitized value.
*/
-function sanitize_option($option, $value) {
+function sanitize_option( $option, $value ) {
global $wpdb;
+
+ $original_value = $value;
$error = '';
switch ( $option ) {
case 'thread_comments_depth':
case 'users_can_register':
case 'start_of_week':
+ case 'site_icon':
$value = absint( $value );
break;
* Filter an option value following sanitization.
*
* @since 2.3.0
+ * @since 4.3.0 Added the `$original_value` parameter.
*
- * @param string $value The sanitized option value.
- * @param string $option The option name.
+ * @param string $value The sanitized option value.
+ * @param string $option The option name.
+ * @param string $original_value The original value passed to the function.
*/
- $value = apply_filters( "sanitize_option_{$option}", $value, $option );
-
- return $value;
+ return apply_filters( "sanitize_option_{$option}", $value, $option, $original_value );
}
/**
* @since 2.2.1
*
* @param string $string The string to be parsed.
- * @param array $array Variables will be stored in this array.
+ * @param array $array Variables will be stored in this array.
*/
function wp_parse_str( $string, &$array ) {
parse_str( $string, $array );
* @since 2.5.0
* @link http://www.php.net/sprintf
*
- * @param string $pattern The string which formatted args are inserted.
+ * @param string $pattern The string which formatted args are inserted.
* @param mixed $args ,... Arguments to be formatted into the $pattern string.
* @return string The formatted string.
*/
* @since 2.5.0
*
* @param string $pattern Content containing '%l' at the beginning.
- * @param array $args List items to prepend to the content and replace '%l'.
+ * @param array $args List items to prepend to the content and replace '%l'.
* @return string Localized list items and rest of the content.
*/
-function wp_sprintf_l($pattern, $args) {
+function wp_sprintf_l( $pattern, $args ) {
// Not a match
if ( substr($pattern, 0, 2) != '%l' )
return $pattern;
*
* @since 2.5.0
*
- * @param string $str String to get the excerpt from.
- * @param integer $count Maximum number of characters to take.
- * @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string.
+ * @param string $str String to get the excerpt from.
+ * @param int $count Maximum number of characters to take.
+ * @param string $more Optional. What to append if $str needs to be trimmed. Defaults to empty string.
* @return string The excerpt.
*/
function wp_html_excerpt( $str, $count, $more = null ) {
*
* @since 2.7.0
*
+ * @global string $_links_add_base
+ *
* @param string $content String to search for links in.
- * @param string $base The base URL to prefix to links.
- * @param array $attrs The attributes which should be processed.
+ * @param string $base The base URL to prefix to links.
+ * @param array $attrs The attributes which should be processed.
* @return string The processed content.
*/
function links_add_base_url( $content, $base, $attrs = array('src', 'href') ) {
* @since 2.7.0
* @access private
*
+ * @global string $_links_add_base
+ *
* @param string $m The matched link.
* @return string The processed link.
*/
-function _links_add_base($m) {
+function _links_add_base( $m ) {
global $_links_add_base;
//1 = attribute name 2 = quotation mark 3 = URL
return $m[1] . '=' . $m[2] .
*
* @since 2.7.0
*
+ * @global string $_links_add_target
+ *
* @param string $content String to search for links in.
- * @param string $target The Target to add to the links.
- * @param array $tags An array of tags to apply to.
+ * @param string $target The Target to add to the links.
+ * @param array $tags An array of tags to apply to.
* @return string The processed content.
*/
function links_add_target( $content, $target = '_blank', $tags = array('a') ) {
* @since 2.7.0
* @access private
*
+ * @global string $_links_add_target
+ *
* @param string $m The matched link.
* @return string The processed link.
*/
*
* @since 2.9.0
*
- * @param string $string String containing HTML tags
- * @param bool $remove_breaks optional Whether to remove left over line breaks and white space chars
+ * @param string $string String containing HTML tags
+ * @param bool $remove_breaks Optional. Whether to remove left over line breaks and white space chars
* @return string The processed string.
*/
function wp_strip_all_tags($string, $remove_breaks = false) {
* @param string $str
* @return string
*/
-function sanitize_text_field($str) {
+function sanitize_text_field( $str ) {
$filtered = wp_check_invalid_utf8( $str );
if ( strpos($filtered, '<') !== false ) {
*
* @since 3.1.0
*
- * @param string $path A path.
+ * @param string $path A path.
* @param string $suffix If the filename ends in suffix this will also be cut off.
* @return string
*/
* Violating our coding standards for a good function name.
*
* @since 3.0.0
+ *
+ * @staticvar string|false $dblq
*/
function capital_P_dangit( $text ) {
// Simple replacement for titles
return str_replace( 'Wordpress', 'WordPress', $text );
// Still here? Use the more judicious replacement
static $dblq = false;
- if ( false === $dblq )
+ if ( false === $dblq ) {
$dblq = _x( '“', 'opening curly double quote' );
+ }
return str_replace(
array( ' Wordpress', '‘Wordpress', $dblq . 'Wordpress', '>Wordpress', '(Wordpress' ),
array( ' WordPress', '‘WordPress', $dblq . 'WordPress', '>WordPress', '(WordPress' ),
$text );
-
}
/**
* @since 3.6.0
*
* @param string $content A string which might contain a URL.
- * @return string The found URL.
+ * @return string|false The found URL.
*/
function get_url_in_content( $content ) {
if ( empty( $content ) ) {
*
* @since 4.0.0
*
+ * @staticvar string $spaces
+ *
* @return string The spaces regexp.
*/
function wp_spaces_regexp() {
- static $spaces;
+ static $spaces = '';
if ( empty( $spaces ) ) {
/**
* Print the important emoji-related styles.
*
* @since 4.2.0
+ *
+ * @staticvar bool $printed
*/
function print_emoji_styles() {
static $printed = false;
<?php
}
+/**
+ *
+ * @global string $wp_version
+ * @staticvar bool $printed
+ */
function print_emoji_detection_script() {
global $wp_version;
static $printed = false;
);
$version = 'ver=' . $wp_version;
- $develop_src = false !== strpos( $wp_version, '-src' );
- if ( $develop_src || ( defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ) ) {
+ if ( SCRIPT_DEBUG ) {
$settings['source'] = array(
/** This filter is documented in wp-includes/class.wp-scripts.php */
'wpemoji' => apply_filters( 'script_loader_src', includes_url( "js/wp-emoji.js?$version" ), 'wpemoji' ),