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[.,d]*)'/'="" ]="$open_sq_flag" .="" '$1'="" .="" $closing_single_quote;="" }="" single="" quote="" at="" start,="" or="" preceded="" by="" (,="" {,=""><, [,="" ",="" -,="" or="" spaces.="" if="" (="" "'"="" !="=" $opening_single_quote="" )="" {="" $dynamic[=""><=a|[([{"-]|<|' .="" $spaces="" .="" ')'/'="" ]="$open_sq_flag;" }="" apostrophe="" in="" a="" word.="" no="" spaces,="" double="" apostrophes,="" or="" other="" punctuation.="" if="" (="" "'"="" !="=" $apos="" )="" {="" $dynamic[=""> 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.
. '|'
. '<[^[]>]*>' // 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.="" .="" '|'="" .="" '[^="">]*>' // 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 |