public static function htmlAttribute(array $attributes = []) : string
    {
        $return = '';
        foreach ($attributes as $attribute => $value) {
            $json = false;
            if ($attribute == 'data-options') {
                if (is_array($value) || is_object($value)) {
                    $value = json_encode($value);
                    $json = true;
                } elseif (is_string($value)) {
                    json_decode($value);
                    $json = json_last_error() == JSON_ERROR_NONE;
                }
            }

            $return .= $attribute;
            if (is_null($value)) {
                $return .= ' ';
            } else {
                $return .= '=' . (!$json ? '"' : "'");

                if (!is_array($value)) {
                    $return .= is_bool($value) ? ($value ? 'true' : 'false') : htmlentities($value);
                } else {
                    switch ($attribute) {
                        case 'style':
                            $return .= implode('; ', $value);
                            break;
                        default:
                            $return .= implode(' ', $value);
                            break;
                    }
                }
                $return .= (!$json ? '"' : "'") . ' ';
            }
        }

        return $return;
    }
public static function htmlAttribute(array $attributes = []) : string
    {
        $return = '';
        foreach ($attributes as $attribute => $value) {
            $json = false;
            if ($attribute == 'data-options') {
                if (is_array($value) || is_object($value)) {
                    $value = json_encode($value);
                    $json = true;
                } elseif (is_string($value)) {
                    json_decode($value);
                    $json = json_last_error() == JSON_ERROR_NONE;
                }
            }

            $return .= $attribute;
            if (is_null($value)) {
                $return .= ' ';
            } else {
                $return .= '=' . (!$json ? '"' : "'");

                if (!is_array($value)) {
                    $return .= is_bool($value) ? ($value ? 'true' : 'false') : htmlentities($value);
                } else {
                    switch ($attribute) {
                        case 'style':
                            $return .= implode('; ', $value);
                            break;
                        default:
                            $return .= implode(' ', $value);
                            break;
                    }
                }
                $return .= (!$json ? '"' : "'") . ' ';
            }
        }

        return $return;
    }
@param array $attributes

@return string