1. 首页
  2. WordPress 函数手册

wptexturize()

wptexturize( string $text, bool $reset = false )

用格式化的实体替换普通的纯文本字符。
Replaces common plain text characters with formatted entities.

目录锚点:#说明#参数#源码


说明(Description)

Description返回给定文本,并将引号转换为智能引号、撇号、破折号、省略号、商标符号和乘法符号。举个例子,因为今天的努力值得明天的“假期”。。。变成:’因为今天的努力使它值得明天的“假日”…某些HTML块中的代码被跳过。不要在“init”操作钩子之前使用此函数;一切都将中断。


参数(Parameters)

参数 类型 说明
$text (string) 要格式化的文本。
$reset (bool) 对于单元测试,设置为true。转换后的图案将重置。

源码(Source)

/**
 * Replaces common plain text characters into formatted entities
 *
 * As an example,
 *
 *     'cause today's effort makes it worth tomorrow's "holiday" ...
 *
 * Becomes:
 *
 *     ’cause today’s effort makes it worth tomorrow’s “holiday” …
 *
 * Code within certain html blocks are skipped.
 *
 * Do not use this function before the 'init' action hook; everything will break.
 *
 * @since 0.71
 *
 * @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.
 * @return string The string replaced with html entities
 */
function wptexturize( $text, $reset = false ) {
	global $wp_cockneyreplace, $shortcode_tags;
	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 = '',
		$open_sq_flag = '',
		$apos_flag = '';

	// If there's nothing to do, just stop.
	if ( empty( $text ) || false === $run_texturize ) {
		return $text;
	}

	// Set up static variables. Run once only.
	if ( $reset || ! isset( $static_characters ) ) {
		/**
		 * Filter whether to skip running wptexturize().
		 *
		 * Passing false to the filter will effectively short-circuit wptexturize().
		 * returning the original text passed to the function instead.
		 *
		 * The filter runs only once, the first time wptexturize() is called.
		 *
		 * @since 4.0.0
		 *
		 * @see wptexturize()
		 *
		 * @param bool $run_texturize Whether to short-circuit wptexturize().
		 */
		$run_texturize = apply_filters( 'run_wptexturize', $run_texturize );
		if ( false === $run_texturize ) {
			return $text;
		}

		/* translators: opening curly double quote */
		$opening_quote = _x( '“', 'opening curly double quote' );
		/* translators: closing curly double quote */
		$closing_quote = _x( '”', 'closing curly double quote' );

		/* translators: apostrophe, for example in 'cause or can't */
		$apos = _x( '’', 'apostrophe' );

		/* translators: prime, for example in 9' (nine feet) */
		$prime = _x( '′', 'prime' );
		/* translators: double prime, for example in 9" (nine inches) */
		$double_prime = _x( '″', 'double prime' );

		/* translators: opening curly single quote */
		$opening_single_quote = _x( '‘', 'opening curly single quote' );
		/* translators: closing curly single quote */
		$closing_single_quote = _x( '’', 'closing curly single quote' );

		/* translators: en dash */
		$en_dash = _x( '–', 'en dash' );
		/* translators: em dash */
		$em_dash = _x( '—', 'em dash' );

		$default_no_texturize_tags = array('pre', 'code', 'kbd', 'style', 'script', 'tt');
		$default_no_texturize_shortcodes = array('code');

		// if a plugin has provided an autocorrect array, use it
		if ( isset($wp_cockneyreplace) ) {
			$cockney = array_keys( $wp_cockneyreplace );
			$cockneyreplace = array_values( $wp_cockneyreplace );
		} else {
			/* 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 );
		$static_replacements = array_merge( array( '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace );


		// Pattern-based replacements of characters.
		// Sort the remaining patterns into several arrays for performance tuning.
		$dynamic_characters = array( 'apos' => array(), 'quote' => array(), 'dash' => array() );
		$dynamic_replacements = array( 'apos' => array(), 'quote' => array(), 'dash' => array() );
		$dynamic = array();
		$spaces = wp_spaces_regexp();

		// '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[ '/'(dd)'(?=|[.,:;!?)}-]]|>|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_single_quote;
		}
		if ( "'" !== $apos || '"' !== $closing_quote ) {
			$dynamic[ '/'(dd)"(?=|[.,:;!?)}-]]|>|' . $spaces . ')/' ] = $apos_flag . '$1' . $closing_quote;
		}

		// '99 '99s '99's (apostrophe)  But never '9 or '99% or '999 or '99.0.
		if ( "'" !== $apos ) {
			$dynamic[ '/'(?=dd(?:|(?![%d]|[.,]d)))/' ] = $apos_flag;
		}

		// Quoted Numbers like '0.42'
		if ( "'" !== $opening_single_quote && "'" !== $closing_single_quote ) {
			$dynamic[ '/(?<=a|' .="" $spaces="" .="" ')'(d&#91;.,d&#93;*)'/'="" &#93;="$open_sq_flag" .="" '$1'="" .="" $closing_single_quote;="" }="" single="" quote="" at="" start,="" or="" preceded="" by="" (,="" {,=""><, &#91;,="" ",="" -,="" or="" spaces.="" if="" (="" "'"="" !="=" $opening_single_quote="" )="" {="" $dynamic&#91;=""><=a|&#91;(&#91;{"-&#93;|<|' .="" $spaces="" .="" ')'/'="" &#93;="$open_sq_flag;" }="" apostrophe="" in="" a="" word.="" no="" spaces,="" double="" apostrophes,="" or="" other="" punctuation.="" if="" (="" "'"="" !="=" $apos="" )="" {="" $dynamic&#91;=""> is found.
		.     '-(?!->)' // Dash not followed by end of comment.
		.     '[^-]*+' // Consume non-dashes.
		. ')*+'         // Loop possessively.
		. '(?:-->)?';   // End of comment. If not found, match all input.

	$shortcode_regex =
		  '['              // Find start of shortcode.
		. '[\/[]?'         // Shortcodes may begin with [/ or [[
		. $tagregexp        // Only match registered shortcodes, because performance.
		. '(?:'
		.     '[^[]<>]+'  // Shortcodes do not contain other shortcodes. Quantifier critical.
		. '|'
		.     '<&#91;^&#91;&#93;>]*>' // HTML elements permitted. Prevents matching ] before >.
		. ')*+'             // Possessive critical.
		. ']'              // Find end of shortcode.
		. ']?';            // Shortcodes may end with ]]

	$regex =
		  '/('                   // Capture the entire match.
		.     '<' find="" start="" of="" element.="" .="" '(?(?="!--)'" is="" this="" a="" comment?="" .="" $comment_regex="" find="" end="" of="" comment.="" .="" '|'="" .="" '&#91;^="">]*>'       // Find end of element.
		.     ')'
		. '|'
		.     $shortcode_regex   // Find shortcodes.
		. ')/s';

	$textarr = preg_split( $regex, $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY );

	foreach ( $textarr as &$curl ) {
		// Only call _wptexturize_pushpop_element if $curl is a delimiter.
		$first = $curl[0];
		if ( '<' =="=" $first="" &&="">
更新版本 源码位置 使用 被使用
0.71 wp-includes/formatting.php 8 5

wptexturize() 为WP2原创文章,链接:https://www.wp2.cn/functions/wptexturize/