$v ) { if ( ! preg_match( '/^(\[([-().#>+~|*a-z]+)]\s*)?(.+?)\s*:\s*(.+?)\s*$/', $v, $matches ) ) { continue; } $pseudo = trim( $matches[2] ); $key = trim( $matches[3] ); $val = trim( $matches[4] ); if ( ! preg_match( '/\A[a-z-]+\z/i', $key ) ) { continue; } $value = "{$key}: {$val};"; $index[ $pseudo ][ $value ] = $k; $styles[ $pseudo ][ $k ] = $value; } ksort( $styles ); foreach ( $styles as $pseudo => $values ) { foreach ( $values as $k => $value ) { if ( $index[ $pseudo ][ $value ] !== $k ) { unset( $styles[ $pseudo ][ $k ] ); } } $styles[ $pseudo ] = array_values( $styles[ $pseudo ] ); } return wp_json_encode( $styles ); } /** * @param string $style * @param bool $is_editor * * @return array|string */ public function decode_style( $style, $is_editor = false ) { $styles = @json_decode( $style, true ); // phpcs:ignore WordPress.PHP.NoSilencedErrors.Discouraged if ( ! is_array( $styles ) ) { $styles = []; } if ( ! $is_editor ) { return $styles; } $items = []; foreach ( $styles as $pseudo => $values ) { foreach ( $values as $value ) { $items[] = '' === $pseudo ? $value : "[{$pseudo}] {$value}"; } $items[] = ''; } return implode( "\r\n", $items ); } }