---
title: "raw()"
headingIds:
  [
    "raw",
    "signature",
    "usage",
    "in-an-attribute",
    "dangerouslysetinnerhtml",
    "rawurl-a-narrower-trust-boundary",
    "raw-vs-rawurl",
    "see-also",
  ]
---

# raw()

Marque une chaîne HTML comme fiable. Utilisez cette échappatoire uniquement sur du contenu que vous contrôlez ou avez assaini.

## Signature

`raw(value: string)` retourne un `RawString`, utilisable comme contenu ou comme valeur d’attribut.

```tsx
raw(value: string): RawString
```

## Utilisation

Dans le contenu, `raw()` désactive l’échappement et insère la chaîne telle quelle. Les autres chaînes restent du texte échappé.

```tsx
import { raw } from "@vincle/core";

<div>{raw(await renderMarkdown(post.body))}</div>;
<div>{raw(DOMPurify.sanitize(userInput))}</div>;

// ❌ XSS if userInput contains <script>alert(1)</script>
<div>{raw(userInput)}</div>;
// ✅ Vincle escapes by default
<div>{userInput}</div>;
```

## Dans un attribut

Dans un attribut, les guillemets restent protégés pour conserver la structure HTML, mais `raw()` désactive notamment le filtrage des schémas d’URL. Ne l’utilisez pas sur des données non fiables.

```tsx
<a href={raw("javascript:go()")}>x</a>; // href="javascript:go()"
<a title={raw('" onmouseover="alert(1)')}>x</a>; // title="&quot; onmouseover=&quot;…"
```

## dangerouslySetInnerHTML

`dangerouslySetInnerHTML` est une forme de compatibilité pour insérer du HTML de confiance. L’application est responsable de l’assainissement préalable.

```tsx
<div dangerouslySetInnerHTML={{ __html: "<b>bold</b>" }} />
```

## `rawUrl()` : une frontière de confiance plus étroite

`rawUrl()` permet un schéma d’URL que le filtre bloque normalement, tout en conservant l’échappement de la valeur. Il convient aux protocoles applicatifs explicitement approuvés.

```tsx
import { rawUrl } from "@vincle/core";

<a href={rawUrl("phpstorm://open?file=src/app.ts")}>open in the IDE</a>;
```

### `raw()` et `rawUrl()`

Pour une URL approuvée, préférez `rawUrl()`. Pour du balisage HTML, `raw()` autorise une insertion bien plus large et nécessite un contrôle du contenu.

## Voir aussi

Consultez le [modèle de sécurité](/fr/guide/security) et auditez les appels à `raw()` dans votre application.
