# Limpeza HTML das descrições de produtos e categorias: documentação

> Instalação Descarregue o arquivo dfhtmlcleaner.zip a partir da sua conta de cliente DataFirefly. No back-office, abra Módulos → Gestor de módulos, clique em Carregar um módulo e coloque o arquivo.…

- Página: <https://www.datafirefly.com/pt/documentation/nettoyage-html-descriptions-prestashop/>
- Idioma: pt
- Atualizado em: 2026-09-09
- Outros idiomas: [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), [it](https://www.datafirefly.com/it/documentation/nettoyage-html-descriptions-prestashop/index.md), [pl](https://www.datafirefly.com/pl/documentation/nettoyage-html-descriptions-prestashop/index.md), [nl](https://www.datafirefly.com/nl/documentation/nettoyage-html-descriptions-prestashop/index.md)
- Índice: <https://www.datafirefly.com/pt/documentation/llms.txt>

## Instalação

1. Descarregue o arquivo `dfhtmlcleaner.zip` a partir da sua conta de cliente DataFirefly.
2. No back-office, abra **Módulos → Gestor de módulos**, clique em **Carregar um módulo** e coloque o arquivo.
3. Terminada a instalação, aparece um separador **HTML Cleaner** no menu **Catálogo**.

A instalação cria a tabela `ps_dfhtmlcleaner_backup`, que guarda os valores substituídos. É eliminada na desinstalação.

Faça uma cópia de segurança da base de dados antes da primeira limpeza real. O módulo guarda os valores substituídos e sabe restaurá-los, mas uma cópia completa continua a ser a rede de segurança de referência.

## Pré-requisitos

- PrestaShop 8.0 a 9.x
- PHP 7.4 a 8.3
- Extensões PHP `dom` e `mbstring` ativas

## Primeira passagem: simular antes de escrever

Abra **Catálogo → HTML Cleaner**. O painel _Executar uma limpeza_ está no topo da página.

1. Assinale os conteúdos a tratar. **Produtos** e **Categorias** estão ativos por predefinição; pode acrescentar as páginas CMS, as marcas e os fornecedores.
2. Escolha um idioma ou deixe _Todos os idiomas_. Em multiloja, aparece também um seletor de loja.
3. Clique em **Simular**. Nada é escrito na base de dados.

No fim do percurso, obtém três informações: o número de registos analisados, o número de registos que a limpeza alteraria e o peso total poupado. Por baixo, são apresentadas até dez comparações antes/depois lado a lado, cada uma com ligação direta para a ficha em causa.

Se o número de fichas abrangidas o surpreender, abra dois ou três exemplos e verifique o resultado antes de avançar. É precisamente essa a função deste modo.

## Limpar a sério

Validada a simulação, clique em **Limpar realmente** e confirme. O percurso repete-se de forma idêntica, mas desta vez os valores são escritos.

O tratamento é feito por lotes sucessivos em AJAX. Uma barra de progresso indica o avanço, um registo lista os lotes tratados e o botão **Parar** interrompe de forma limpa no fim do lote em curso. Mantenha o separador aberto durante a operação.

### Dimensão dos lotes

Por predefinição, são tratados 50 registos por pedido. Num alojamento partilhado lento, baixe para 10 ou 20 nas definições gerais. Num servidor dedicado, pode subir até 500.

## As regras em detalhe

As regras estão agrupadas em quatro famílias, mais abaixo na página. Qualquer alteração gravada é tida em conta de imediato, incluindo pela caixa de testes.

### Marcação antiga e não segura

- **Marcação Microsoft Word / Office**: comentários condicionais, ilhas XML, etiquetas ``, ``, `` e atributos `mso-*`.
- **Comentários HTML**.
- **Elementos script, style, object e form**. Os gestores de eventos `onclick` e equivalentes são removidos em todos os casos, independentemente da opção.
- **Iframes**. Três modos: manter tudo, manter apenas os fornecedores de confiança (predefinição) ou eliminar tudo. A lista predefinida cobre YouTube, Vimeo, Dailymotion, Google Maps, SoundCloud, Spotify e OpenStreetMap. Acrescente os seus próprios domínios no campo previsto, um por linha ou separados por vírgulas. A verificação incide sobre o domínio real: um endereço do tipo `youtube.com.exemplo.tld` é rejeitado.

### Atributos

- **Estilos inline**: _Manter_, _Filtrar_ (predefinição) ou _Eliminar_. O modo Filtrar retira `mso-*`, `font-family`, `font-size`, `line-height`, `color` e alguns outros, e mantém o que diz respeito à disposição.
- **Classes**: _Manter_, _Retirar as classes de editor_ (predefinição: `MsoNormal`, `ql-`, `gmail_`, `x_`, `western`) ou _Eliminar_.
- **Atributos id**: desativado por predefinição, porque podem existir âncoras internas a depender deles.
- **Atributos data-***: desativado por predefinição, uma vez que alguns temas e módulos os utilizam.
- **Atributos de apresentação obsoletos**: `align`, `bgcolor`, `border`, `cellpadding`, `face`, `valign`, etc.
- **Atributos não reconhecidos**: só é mantida uma lista segura (`href`, `src`, `alt`, `title`, `colspan`...), completada pelos atributos próprios dos meios em `iframe`, `video`, `audio` e `source`.
- **width e height nas imagens**. Desativado por predefinição, porque estes atributos limitam o desvio de disposição (CLS).

### Estrutura

- **Desagrupar os span sem atributo** e, como opção mais agressiva, **os div sem atributo**.
- **Desagrupar as etiquetas font**.
- **Modernizar as etiquetas obsoletas**: `b` para `strong`, `i` para `em`, `center` para `div`, `strike` para `s`, `tt` para `code`.
- **Eliminar as etiquetas vazias**. As células de tabela, as linhas e os elementos de estrutura ficam excluídos desta regra para não deformar a disposição.
- **Lista branca de etiquetas**: desativada por predefinição. Quando ativa, qualquer etiqueta fora da lista é desagrupada e o seu conteúdo de texto é conservado.

### Tipografia e meios

- **Espaços inquebráveis**: as séries são reduzidas a um só.
- **Quebras de linha consecutivas**: três `` ou mais passam a dois, e os `` colados ao fecho de um bloco são retirados.
- **Espaços e indentação**. O conteúdo das etiquetas `pre`, `code` e `textarea` escapa a esta normalização.
- **Proteger as ligações**: adição de `rel="noopener noreferrer"` às ligações com `target="_blank"` e eliminação dos URL `javascript:`.
- **Atributo alt em falta** nas imagens e **loading="lazy"** como opção.

A regra dos espaços inquebráveis é indolor em português: ao contrário do francês, a tipografia portuguesa não exige espaço antes de `;`, `:`, `!` ou `?`. Se o seu catálogo foi importado de uma fonte francesa, esta regra remove precisamente esses espaços residuais.

## Cópias de segurança e restauro

Enquanto a opção **Guardar antes de escrever** estiver ativa, cada valor substituído é copiado para a tabela do módulo com um identificador de execução. O painel **Cópias de segurança e restauro** lista as execuções por data e por tipo de conteúdo.

O botão **Restaurar** repõe todos os campos de uma execução e elimina depois as entradas correspondentes. A retenção define-se em dias nas definições gerais; deixe 0 para conservar o histórico indefinidamente. As entradas expiradas são eliminadas na abertura da página.

A limpeza automática ao gravar não cria entrada de cópia de segurança, ao contrário do tratamento por lotes.

## Limpeza automática ao gravar

A opção **Limpar automaticamente ao gravar** aplica as mesmas regras a cada gravação de um produto ou de uma categoria no back-office, através dos hooks acionados antes da escrita do objeto. Cobre tanto a página de produto v2 como as páginas anteriores.

Está desativada por predefinição. Valide as suas regras em simulação antes de a ativar.

## Caixa de testes

O painel **Caixa de testes** aplica as regras em vigor a um excerto de HTML colado e mostra o resultado, bem como o peso poupado. Nada é lido nem escrito na base de dados. É a forma mais rápida de verificar o efeito de uma definição antes de relançar uma simulação completa.

## Depois de uma grande limpeza

- Limpe a cache do PrestaShop em **Parâmetros avançados → Desempenho**.
- Se a indexação automática da pesquisa estiver ativa e o seu índice incluir as descrições, reconstrua-o em **Parâmetros da loja → Pesquisa**.

## Resolução de problemas

### Os botões Simular e Limpar não reagem

Confirme primeiro que está na versão 1.0.1 ou superior e recarregue a página com `Ctrl+F5` para limpar a cache do navegador. Se o problema persistir, abra a consola do navegador: uma mensagem `dfHtmlCleanerAjaxUrl is not defined` indica que o ficheiro JavaScript do módulo não foi servido, geralmente por causa de uma cache de servidor ou das permissões de leitura em `modules/dfhtmlcleaner/views/js/`.

### O tratamento para ao fim de alguns lotes

Reduza a dimensão dos lotes para 10 ou 20 nas definições gerais e volte a executar. O tratamento recomeça do início, mas as fichas já limpas deixam de ser alteradas: o motor é idempotente, uma segunda passagem não produz qualquer escrita inútil. O registo mostra o código HTTP devolvido quando um lote falha, o que permite distinguir um tempo esgotado (504) de um erro PHP (500) ou de um problema de token (403).

### Um vídeo integrado desapareceu

O fornecedor provavelmente não consta da lista de domínios de confiança. Acrescente-o, restaure a execução em causa a partir do painel de cópias de segurança e volte a executar.

### Uma tabela perdeu a formatação

Os atributos `width`, `border` e `cellpadding` das tabelas fazem parte dos atributos de apresentação obsoletos. Se o seu tema não tiver estilo CSS para tabelas, desative esta regra e restaure a execução.

### A limpeza não altera nada

É o comportamento esperado num catálogo já limpo. Verifique com a caixa de testes que um excerto conhecido como problemático é efetivamente transformado e que as regras correspondentes estão ativas.

## Desinstalação

A desinstalação a partir do gestor de módulos elimina a tabela de cópias de segurança, as entradas de configuração e o separador do menu. As descrições já limpas não são repostas: restaure as execuções em causa antes de desinstalar se quiser voltar atrás.
