summaryrefslogtreecommitdiffstats
path: root/wp-includes/class-wp-matchesmapregex.php
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/class-wp-matchesmapregex.php
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/class-wp-matchesmapregex.php')
-rw-r--r--wp-includes/class-wp-matchesmapregex.php90
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 ] ) : '' );
+ }
+}