Skip to content

HTML and formatted text in cells

Put paragraphs, headings, links and lists into a body cell: what WordPress and Joomla filter out, why images inside the text stay links, and the cell size limit.

  • 3 min read
  • Updated October 13, 2026
On this page

A body cell can hold plain text or HTML. Content Uploader sends what is in the cell to the site, and the site then applies its own filter, as it would when an editor pastes HTML into the post editor.

Writing it#

  • Paragraphs: wrap each in <p>…</p>: <p>First paragraph.</p><p>Second paragraph.</p>. Line breaks inside a cell are stored as typed; use HTML tags when you need paragraphs, headings and lists.
  • Headings, emphasis, links and lists: <h2>, <strong>, <em>, <a href="https://example.com">text</a>, <ul><li>…</li></ul>, <ol>. Tables, blockquotes and images work too, subject to the site's filter below.
  • In a CSV file, a cell that contains commas, quotes or line breaks must be wrapped in double quotes, and each double quote inside written twice: "<p>He said ""hello"".</p>". Spreadsheet programs do this for you when they save as CSV.
  • In an Excel file just type or paste the HTML into the cell. (In Excel for Windows, Alt+Enter makes a line break inside a cell.)

The content field's editor can also build a body from several columns with a toolbar for headings, lists and links, which is useful when the text is spread over columns such as Intro, Details and Credits.

What the site filters#

Your text is stored through the destination's own safe-HTML rules, so markup the site does not allow is removed, not rejected:

  • WordPress saves Content and Excerpt with its post-content filter (wp_kses_post), the same one it applies to an author without the right to publish unfiltered HTML. A Title is saved as plain text (tags are stripped).
  • Joomla applies the text filters of the publishing account's groups, exactly as its article editor does. Which tags survive depends on your site's Global Configuration → Text Filters for that group; a Super User group is usually not filtered, other groups usually are. If tags are missing after publishing, check the filter of the group the publishing account is in (the publishing account).

We tested one cell with every kind of unwanted markup on both platforms, with a Joomla publishing account in the Publisher group:

In the cell WordPress keeps Joomla keeps
<script>alert(1)</script> The tag is removed; its text, alert(1), stays as plain text The same
<iframe src="…"></iframe> Removed Removed
<p onclick="…"> The <p> stays, the onclick is removed The same
style="color:red" Kept Kept
<img src="https://…" alt="x"> Kept Kept
<a href="javascript:…"> The link stays with the javascript: part removed The link loses its address
<form><input name="x"></form> Removed Kept

So a script never reaches a page, but what else is removed depends on the site. If the result on your site is not what you expect, compare the stored text with the cell, and on Joomla look at the text filter of the account's group.

The review shows each item's body as it will be sent, in a frame of its own, before anything is published. What the site stores afterwards can differ by what its filter removes.

Images inside the text#

An <img src="https://…"> in a body is sent as it is: the image stays a link to its address and is not downloaded or added to the media library. Content Uploader's image feature is for the dedicated image fields (WordPress's featured image, Joomla's intro and full-article images): see where images come from.

Size#

A single cell may hold up to 32 KB of text, about 32,000 characters, and a row up to 128 KB. A longer text is refused with Cells must contain valid UTF-8 text of at most 32 KB. Put the text in two columns and join them with a template ({{ Part 1 }}{{ Part 2 }}, see templates), or on Joomla map the second part to Full Text.

Check before you upload#

  • Open the CSV in a plain text editor: are the tags where you expect and are the quotes balanced?
  • Look at the preview in the configuration editor and at an opened item in the review: the body is shown rendered, so a missing closing tag or a stray quote is easy to see.
  • Plain text works as well. Without any tags, a body is stored as typed, with line breaks kept; an ampersand is stored as &amp;, which still shows as &.

Was this article helpful?