---
layout: default
title: Converting a CSV into an HTML table
---
# HTML conversion
The `HTMLConverter` converts a CSV records collection into a HTML Table using PHP's `DOMDocument` class.
## Settings
Prior to converting your records collection into a HTML table, you may wish to configure optional information to improve your table rendering.
Because we are using internally the XMLConverter, if an error occurs while validating the submitted values a DOMException
exception will be thrown.
### HTMLConverter::table
```php
public HTMLConverter::table(string $class_name, string $id_value = ''): self
```
This method sets the optional table `class` and `id` attribute values
The default class
attribute value is table-csv-data
.
The default id
attribute value is the empty string.
### HTMLConverter::tr
```php
public HTMLConverter::tr(string $record_offset_attribute_name): self
```
This method sets the optional attribute name for the record offset on the HTML `tr` tag.
If none is use or an empty string is given, the record offset information won't be exported to the HTML table.
### HTMLConverter::td
```php
public HTMLConverter::td(string $fieldname_attribute_name): self
```
This method sets the optional attribute name for the field name on the HTML `td` tag.
If none is use or an empty string is given, the field name information won't be exported to the HTML table.
## Conversion
Since version 9.3.0
this method accepts optional header and footer records to display them in the exported HTML table.
```php
public HTMLConverter::convert(iterable $records, array $header_record = [], array $footer_record = []): string
```
The `HTMLConverter::convert` accepts an `iterable` which represents the records collection and returns a string.
It optionally accepts:
- an array of string representing the tabular header;
- an array of string representing the tabular footer;
If any of these array is present and non-empty the tabular data will be contained in a `tbody` tag as per HTML specification.
```php
use League\Csv\HTMLConverter;
//we fetch the info from a DB using a PDO object
$sth = $dbh->prepare("SELECT firstname, lastname, email FROM users LIMIT 2");
$sth->setFetchMode(PDO::FETCH_ASSOC);
$sth->execute();
$converter = (new HTMLConverter())
->table('table-csv-data', 'users')
->tr('data-record-offset')
->td('title')
;
// The PDOStatement Object implements the Traversable Interface
// that's why Converter::convert can directly insert
// the data into the HTML Table
$html = $converter->convert($sth);
echo $html;
//
//
// john |
// doe |
// john.doe@example.com |
//
//
// jane |
// doe |
// jane.doe@example.com |
//
//
$html = $converter->convert($sth, ['First Name', 'Last Name', 'E-mail']);
echo $html;
//
//
//
// First Name |
// Last Name |
// E-mail |
//
//
//
//
// john |
// doe |
// john.doe@example.com |
//
//
// jane |
// doe |
// jane.doe@example.com |
//
//
//
```
If needed you can use the CharsetConverter object to correctly encode your CSV records before conversion.