You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.8 KiB
PHTML
80 lines
1.8 KiB
PHTML
8 months ago
|
<?php
|
||
|
/**
|
||
|
* The HTML helpers.
|
||
|
*
|
||
|
* @since 1.0.0
|
||
|
* @package RankMath
|
||
|
* @subpackage RankMath\Helpers
|
||
|
* @author RankMath <support@rankmath.com>
|
||
|
*/
|
||
|
|
||
|
namespace RankMath\Helpers;
|
||
|
|
||
|
/**
|
||
|
* HTML class.
|
||
|
*/
|
||
|
class HTML {
|
||
|
|
||
|
/**
|
||
|
* Extract attributes from a html tag.
|
||
|
*
|
||
|
* @param string $elem Extract attributes from tag.
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
public static function extract_attributes( $elem ) {
|
||
|
$regex = '#([^\s=]+)\s*=\s*(\'[^<\']*\'|"[^<"]*")#';
|
||
|
preg_match_all( $regex, $elem, $attributes, PREG_SET_ORDER );
|
||
|
|
||
|
$new = [];
|
||
|
$remaining = $elem;
|
||
|
foreach ( $attributes as $attribute ) {
|
||
|
$val = substr( $attribute[2], 1, -1 );
|
||
|
$new[ $attribute[1] ] = $val;
|
||
|
$remaining = str_replace( $attribute[0], '', $remaining );
|
||
|
}
|
||
|
|
||
|
// Chop off tag name.
|
||
|
$remaining = preg_replace( '/<[^\s]+/', '', $remaining, 1 );
|
||
|
// Check for empty attributes without values.
|
||
|
$regex = '/([^<][\w\d:_-]+)[\s>]/i';
|
||
|
preg_match_all( $regex, $remaining, $attributes, PREG_SET_ORDER );
|
||
|
foreach ( $attributes as $attribute ) {
|
||
|
$new[ trim( $attribute[1] ) ] = null;
|
||
|
}
|
||
|
|
||
|
return $new;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Generate html attribute string for array.
|
||
|
*
|
||
|
* @param array $attributes Contains key/value pair to generate a string.
|
||
|
* @param string $prefix If you want to append a prefic before every key.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public static function attributes_to_string( $attributes = [], $prefix = '' ) {
|
||
|
|
||
|
// Early Bail!
|
||
|
if ( empty( $attributes ) ) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
$out = '';
|
||
|
foreach ( $attributes as $key => $value ) {
|
||
|
if ( true === $value || false === $value ) {
|
||
|
$value = $value ? 'true' : 'false';
|
||
|
}
|
||
|
|
||
|
$out .= ' ' . esc_html( $prefix . $key );
|
||
|
if ( null === $value ) {
|
||
|
continue;
|
||
|
}
|
||
|
$out .= sprintf( '="%s"', esc_attr( $value ) );
|
||
|
}
|
||
|
|
||
|
return $out;
|
||
|
}
|
||
|
}
|