---
title: "Feature: #95176 - Introduce <f:transform.html> view helper"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:feature-95176"
source: "Changelog/11.5/Feature-95176-IntroduceFtransformhtmlView-helper.rst"
typo3-version: "11.5"
typo3-major: 11
type: "feature"
issue: 95176
forge: "https://forge.typo3.org/issues/95176"
tags: ["Backend", "Fluid", "Frontend", "ext:fluid"]
rendered: "2026-09-24T21:45:06+00:00"
---

# Feature: #95176 - Introduce \<f:transform.html> view helper {#feature-95176}

See [forge#95176](https://forge.typo3.org/issues/95176)

## Description {#description}

Using Fluid view-helper `<f:format.html>` provides capabilities to
resolve `t3://` URIs, which is used in backend contexts as well. Internally
`<f:format.html>` relies on an existing frontend context, with
corresponding TypoScript configuration in `lib.parseFunc` being given.

In order to separate concerns better, a new `<f:transform.html>`
view helper has been introduced

-   to be used in frontend and backend context without relying on TypoScript,
-   to avoid mixing parsing, sanitization and transformation concerns in
    previously used `ContentObjectRenderer::parseFunc` method of the
    frontend rendering process.

## Impact {#impact}

Individual TYPO3 link handlers (like `t3://` URIs) can be resolved and
substituted without relying on TypoScript configuration and without mixing
concerns in `ContentObjectRenderer::parseFunc` by using Fluid view-helper
`<f:transform.html>`.

### Syntax {#syntax}

`<f:transform.html selector="[ node.attr, node.attr ]" onFailure="[ behavior ]">`

-   `selector`: (optional) comma separated list of node attributes to be considered,
    for example `subjects="a.href,a.data-uri,img.src"` (default `a.href`)
-   `onFailure` (optional) corresponding behavior, in case transformation failed, for example
    URI was invalid or could not be resolved properly (default `removeEnclosure`).
    Based on example `<a href="t3://INVALID">value</a>`. corresponding results
    of each behavior would be like this:

    -   `removeEnclosure`: `value` (removed enclosing tag)
    -   `removeTag`: `` (removed tag, incl. child nodes)
    -   `removeAttr`: `<a>value</a>` (removed attribute)
    -   `null`: `<a href="t3://INVALID">value</a>` (unmodified, as given)

### Example {#example}

```html
<f:transform.html selector="a.href,div.data-uri">
  <a href="t3://page?uid=1" class="page">visit</a>
  <div data-uri="t3://page?uid=1" class="page trigger">visit</div>
</f:transform.html>
```

... will be resolved and transformed to the following markup ...

```html
<a href="https://typo3.localhost/" class="page">visit</a>
<div data-uri="https://typo3.localhost/" class="page trigger">visit</div>
```
