diff options
Diffstat (limited to '')
-rw-r--r-- | wp-includes/class-wp-matchesmapregex.php | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/wp-includes/class-wp-matchesmapregex.php b/wp-includes/class-wp-matchesmapregex.php new file mode 100644 index 0000000..558bd98 --- /dev/null +++ b/wp-includes/class-wp-matchesmapregex.php @@ -0,0 +1,90 @@ +<?php +/** + * WP_MatchesMapRegex helper class + * + * @package WordPress + * @since 4.7.0 + */ + +/** + * Helper class to remove the need to use eval to replace $matches[] in query strings. + * + * @since 2.9.0 + */ +#[AllowDynamicProperties] +class WP_MatchesMapRegex { + /** + * store for matches + * + * @var array + */ + private $_matches; + + /** + * store for mapping result + * + * @var string + */ + public $output; + + /** + * subject to perform mapping on (query string containing $matches[] references + * + * @var string + */ + private $_subject; + + /** + * regexp pattern to match $matches[] references + * + * @var string + */ + public $_pattern = '(\$matches\[[1-9]+[0-9]*\])'; // Magic number. + + /** + * constructor + * + * @param string $subject subject if regex + * @param array $matches data to use in map + */ + public function __construct( $subject, $matches ) { + $this->_subject = $subject; + $this->_matches = $matches; + $this->output = $this->_map(); + } + + /** + * Substitute substring matches in subject. + * + * static helper function to ease use + * + * @param string $subject subject + * @param array $matches data used for substitution + * @return string + */ + public static function apply( $subject, $matches ) { + $oSelf = new WP_MatchesMapRegex( $subject, $matches ); + return $oSelf->output; + } + + /** + * do the actual mapping + * + * @return string + */ + private function _map() { + $callback = array( $this, 'callback' ); + return preg_replace_callback( $this->_pattern, $callback, $this->_subject ); + } + + /** + * preg_replace_callback hook + * + * @param array $matches preg_replace regexp matches + * @return string + */ + public function callback( $matches ) { + $index = (int) substr( $matches[0], 9, -1 ); + return ( isset( $this->_matches[ $index ] ) ? urlencode( $this->_matches[ $index ] ) : '' ); + } +} |