RSS : ajouter <content:encoded> pour le contenu HTML complet #42

Closed
opened 2026-05-13 22:10:00 +00:00 by cedricAbonnel · 0 comments
Owner

Problème

Le flux RSS (/feed) n'exporte que 300 caractères de texte brut dans <description>. Un abonné RSS ne peut pas lire l'article complet dans son lecteur — il doit ouvrir le navigateur.

Comportement souhaité

Ajouter un élément <content:encoded> contenant le HTML complet de l'article, conformément au module RSS Content (http://purl.org/rss/1.0/modules/content/).


Analyse technique

État actuel (public/feed.php)

// ligne 97-98
$plain = preg_replace('/\s+/', ' ', strip_tags($Parsedown->text($article['content'] ?? '')));
$desc  = htmlspecialchars(mb_strimwidth(trim((string)$plain), 0, 300, '…'), ENT_XML1);

Parsedown est déjà instancié (ligne 17). Le HTML complet est à portée, il n'est juste pas exporté.

Implémentation

1. Ajouter le namespace dans <rss> :

<rss version="2.0"
     xmlns:atom="http://www.w3.org/2005/Atom"
     xmlns:content="http://purl.org/rss/1.0/modules/content/"
     xmlns:fh="http://purl.org/syndication/history/1.0">

2. Dans la boucle <item>, ajouter après <description> :

$html = $Parsedown->text($article['content'] ?? '');
?>
      <content:encoded><![CDATA[<?= $html ?>]]></content:encoded>

L'encapsulation CDATA évite d'échapper le HTML et est le format standard pour <content:encoded>.


Fichiers concernés

  • public/feed.php — namespace RSS + élément <content:encoded> (~5 lignes)

Migré depuis varlog#57

## Problème Le flux RSS (`/feed`) n'exporte que 300 caractères de texte brut dans `<description>`. Un abonné RSS ne peut pas lire l'article complet dans son lecteur — il doit ouvrir le navigateur. ## Comportement souhaité Ajouter un élément `<content:encoded>` contenant le HTML complet de l'article, conformément au module RSS Content (http://purl.org/rss/1.0/modules/content/). --- ## Analyse technique ### État actuel (`public/feed.php`) ```php // ligne 97-98 $plain = preg_replace('/\s+/', ' ', strip_tags($Parsedown->text($article['content'] ?? ''))); $desc = htmlspecialchars(mb_strimwidth(trim((string)$plain), 0, 300, '…'), ENT_XML1); ``` Parsedown est **déjà instancié** (ligne 17). Le HTML complet est à portée, il n'est juste pas exporté. ### Implémentation **1. Ajouter le namespace dans `<rss>`** : ```xml <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:fh="http://purl.org/syndication/history/1.0"> ``` **2. Dans la boucle `<item>`, ajouter après `<description>`** : ```php $html = $Parsedown->text($article['content'] ?? ''); ?> <content:encoded><![CDATA[<?= $html ?>]]></content:encoded> ``` L'encapsulation `CDATA` évite d'échapper le HTML et est le format standard pour `<content:encoded>`. --- ## Fichiers concernés - `public/feed.php` — namespace RSS + élément `<content:encoded>` (~5 lignes) --- *Migré depuis [varlog#57](https://git.abonnel.fr/cedricAbonnel/varlog/issues/57)*
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: cedricAbonnel/folio#42