# Pulizia HTML delle descrizioni prodotti e categorie

> Installazione Scarica l'archivio dfhtmlcleaner.zip dal tuo account cliente DataFirefly. Nel back office apri Moduli → Gestore moduli, fai clic su Carica un modulo e trascina l'archivio. A installazione completata, sotto…

- Pagina: <https://www.datafirefly.com/it/documentation/nettoyage-html-descriptions-prestashop/>
- Lingua: it
- Aggiornato il: 2026-07-27
- Altre lingue: [fr](https://www.datafirefly.com/documentation/nettoyage-html-descriptions-prestashop/index.md), [en](https://www.datafirefly.com/en/documentation/nettoyage-html-descriptions-prestashop/index.md), [es](https://www.datafirefly.com/es/documentation/nettoyage-html-descriptions-prestashop/index.md), [de](https://www.datafirefly.com/de/documentation/nettoyage-html-descriptions-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/nettoyage-html-descriptions-prestashop/index.md), [pt](https://www.datafirefly.com/pt/documentation/nettoyage-html-descriptions-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/nettoyage-html-descriptions-prestashop/index.md)
- Indice: <https://www.datafirefly.com/it/documentation/llms.txt>

## Installazione

1. Scarica l'archivio `dfhtmlcleaner.zip` dal tuo account cliente DataFirefly.
2. Nel back office apri **Moduli → Gestore moduli**, fai clic su **Carica un modulo** e trascina l'archivio.
3. A installazione completata, sotto il menu **Catalogo** compare la scheda **HTML Cleaner**.

L'installazione crea la tabella `ps_dfhtmlcleaner_backup`, che conserva i valori sostituiti. Viene eliminata alla disinstallazione.

Esegui un backup del database prima della prima pulizia reale. Il modulo conserva i valori sovrascritti e sa ripristinarli, ma un backup completo resta la rete di sicurezza di riferimento.

## Requisiti

- PrestaShop da 8.0 a 9.x
- PHP da 7.4 a 8.3
- Estensioni PHP `dom` e `mbstring` attive

## Primo passaggio: simulare prima di scrivere

Apri **Catalogo → HTML Cleaner**. Il pannello _Avvia una pulizia_ si trova in cima alla pagina.

1. Spunta i contenuti da elaborare. **Prodotti** e **Categorie** sono già selezionati; puoi aggiungere pagine CMS, marchi e fornitori.
2. Scegli una lingua oppure lascia _Tutte le lingue_. In multinegozio compare anche un selettore di negozio.
3. Fai clic su **Simula**. Nel database non viene scritto nulla.

Al termine del passaggio ottieni tre dati: quanti record sono stati analizzati, quanti la pulizia modificherebbe e il peso totale risparmiato. Sotto vengono mostrati fino a dieci confronti prima/dopo affiancati, ciascuno con un link diretto alla scheda.

Se il numero di schede interessate ti sorprende, apri due o tre esempi e verifica il risultato prima di proseguire. È esattamente lo scopo di questa modalità.

## Pulire davvero

Quando la simulazione ti convince, fai clic su **Pulisci davvero** e conferma. Il passaggio si ripete identico, ma questa volta i valori vengono scritti.

L'elaborazione avviene a lotti successivi in AJAX. Una barra di avanzamento mostra il progresso, un registro elenca i lotti elaborati e il pulsante **Interrompi** ferma il processo in modo pulito alla fine del lotto in corso. Lascia la scheda aperta durante l'operazione.

### Dimensione dei lotti

Per impostazione predefinita vengono elaborati 50 record per richiesta. Su hosting condiviso lento scendi a 10 o 20 nelle impostazioni generali. Su un server dedicato puoi salire fino a 500.

## Le regole nel dettaglio

Le regole sono raggruppate in quattro famiglie più in basso nella pagina. Ogni modifica salvata ha effetto immediato, anche nell'area di prova.

### Marcatura obsoleta e non sicura

- **Codice Microsoft Word / Office**: commenti condizionali, isole XML, tag ``, ``, `` e attributi `mso-*`.
- **Commenti HTML**.
- **Elementi script, style, object e form**. I gestori di eventi come `onclick` vengono rimossi in ogni caso, qualunque sia questa opzione.
- **Iframe**. Tre modalità: tenere tutto, tenere solo i fornitori affidabili (predefinita), rimuovere tutto. L'elenco predefinito copre YouTube, Vimeo, Dailymotion, Google Maps, SoundCloud, Spotify e OpenStreetMap. Aggiungi i tuoi domini nel campo previsto, uno per riga o separati da virgole. La verifica riguarda il dominio reale: un indirizzo del tipo `youtube.com.esempio.tld` viene rifiutato.

### Attributi

- **Stili inline**: _Mantieni_, _Filtra_ (predefinito) o _Rimuovi_. La modalità Filtra elimina `mso-*`, `font-family`, `font-size`, `line-height`, `color` e alcuni altri, e conserva quanto riguarda l'impaginazione.
- **Classi**: _Mantieni_, _Rimuovi le classi dell'editor_ (predefinito: `MsoNormal`, `ql-`, `gmail_`, `x_`, `western`) o _Rimuovi_.
- **Attributi id**: disattivato per impostazione predefinita, perché alcune ancore interne possono dipenderne.
- **Attributi data-***: disattivato per impostazione predefinita, alcuni temi e moduli li utilizzano.
- **Attributi di presentazione obsoleti**: `align`, `bgcolor`, `border`, `cellpadding`, `face`, `valign` e altri.
- **Attributi non riconosciuti**: viene conservato solo un elenco sicuro (`href`, `src`, `alt`, `title`, `colspan`…), integrato dagli attributi specifici dei media su `iframe`, `video`, `audio` e `source`.
- **width e height sulle immagini**. Disattivato per impostazione predefinita, perché questi attributi riducono lo spostamento del layout (CLS).

### Struttura

- **Scartare gli span senza attributi** e, come opzione più aggressiva, **i div senza attributi**.
- **Scartare i tag font**.
- **Ammodernare i tag obsoleti**: `b` in `strong`, `i` in `em`, `center` in `div`, `strike` in `s`, `tt` in `code`.
- **Rimuovere i tag vuoti**. Le celle di tabella, le righe e gli elementi di struttura sono esclusi da questa regola per non deformare l'impaginazione.
- **Lista bianca di tag**: disattivata per impostazione predefinita. Se attivata, ogni tag fuori elenco viene scartato conservandone il contenuto testuale.

### Tipografia e media

- **Spazi unificatori**: le sequenze vengono ridotte a uno solo.
- **Interruzioni di riga consecutive**: tre `` o più diventano due, e i `` attaccati a una chiusura di blocco vengono tolti.
- **Spazi e indentazione**. Il contenuto dei tag `pre`, `code` e `textarea` sfugge a questa normalizzazione.
- **Mettere in sicurezza i link**: aggiunta di `rel="noopener noreferrer"` sui link con `target="_blank"`, rimozione degli URL `javascript:`.
- **Attributo alt mancante** sulle immagini e **loading="lazy"** come opzione.

## Backup e ripristino

Finché l'opzione **Salvare prima della scrittura** è attiva, ogni valore sostituito viene copiato nella tabella del modulo con un identificativo di esecuzione. Il pannello **Backup e ripristino** elenca le esecuzioni per data e tipo di contenuto.

Il pulsante **Ripristina** rimette a posto tutti i campi di un'esecuzione, poi elimina le voci corrispondenti. La conservazione si imposta in giorni nelle impostazioni generali; lascia 0 per mantenere lo storico a tempo indeterminato. Le voci scadute vengono eliminate all'apertura della pagina.

La pulizia automatica al salvataggio non crea una voce di backup, a differenza dell'elaborazione a lotti.

## Pulizia automatica al salvataggio

L'opzione **Pulire automaticamente al salvataggio** applica le stesse regole a ogni salvataggio di un prodotto o di una categoria nel back office, tramite gli hook attivati prima della scrittura dell'oggetto. Copre sia la pagina prodotto v2 sia le pagine precedenti.

È disattivata per impostazione predefinita. Valida le tue regole in simulazione prima di attivarla.

## Area di prova

Il pannello **Area di prova** applica le regole in vigore a un frammento HTML incollato e mostra il risultato insieme al peso risparmiato. Non viene letto né scritto nulla nel database. È il modo più rapido di verificare l'effetto di un'impostazione prima di rilanciare una simulazione completa.

## Dopo un'esecuzione importante

- Svuota la cache di PrestaShop da **Parametri avanzati → Prestazioni**.
- Se l'indicizzazione automatica della ricerca è attiva e il tuo indice include le descrizioni, ricostruiscilo da **Parametri del negozio → Ricerca**.

## Risoluzione dei problemi

### I pulsanti Simula e Pulisci non rispondono

Verifica prima di tutto di essere in versione 1.0.1 o successiva, poi ricarica la pagina con `Ctrl+F5` per svuotare la cache del browser. Se il problema resta, apri la console del browser: un messaggio `dfHtmlCleanerAjaxUrl is not defined` indica che il file JavaScript del modulo non è stato servito, di solito per una cache lato server o per i permessi di lettura su `modules/dfhtmlcleaner/views/js/`.

### L'elaborazione si ferma dopo qualche lotto

Riduci la dimensione dei lotti a 10 o 20 nelle impostazioni generali, poi rilancia. Il passaggio riparte dall'inizio, ma le schede già pulite non vengono più modificate: il motore è idempotente, un secondo passaggio non produce scritture inutili. Il registro riporta il codice HTTP restituito quando un lotto fallisce, il che permette di distinguere un timeout (504) da un errore PHP (500) o da un problema di token (403).

### Un video incorporato è sparito

Con ogni probabilità il fornitore non è nell'elenco dei domini affidabili. Aggiungilo, ripristina l'esecuzione interessata dal pannello Backup e rilancia.

### Una tabella ha perso la formattazione

Gli attributi `width`, `border` e `cellpadding` delle tabelle rientrano tra gli attributi di presentazione obsoleti. Se il tuo tema non ha CSS per le tabelle, disattiva quella regola e ripristina l'esecuzione.

### La pulizia non modifica nulla

È il comportamento atteso su un catalogo già pulito. Verifica con l'area di prova che un frammento che sai essere problematico venga effettivamente trasformato, e che le regole corrispondenti siano attive.

## Disinstallazione

La disinstallazione dal gestore moduli elimina la tabella di backup, le voci di configurazione e la scheda del menu. Le descrizioni già pulite non vengono ripristinate: se vuoi tornare indietro, ripristina le esecuzioni che ti interessano prima di disinstallare.
