code: 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;
      }
docs: @param array $attributes
  
  @return string