Limpeza automática de caracteres acentuados nos uploads do WordPress. Não é novidade para os clientes da PortoFácil que não devem utilizar caracteres acentuados em nomes de arquivos enviados para o WordPress.
Neste artigo vamos revisitar o assunto, explicando por que esta prática deve ser evitada. Bem como oferecer ao problema uma solução automatizada do tipo “configure e esqueça”.

Seções desta página
Por que não utilizar caracteres acentuados em arquivos enviados para o WP
Existem três problemas potenciais orbitando o uso de caracteres especiais em uploads do WordPress. Todos parecem de menor importância, mas quando acontecem com nossos blogs os efeitos são, digamos, perturbadores.
Embora os sistemas de arquivo tenham evoluído tremendamente nos últimos anos, a essência destes ainda é a mesma de 30 ou 40 anos atrás. E isso muito dificilmente vai mudar.
Atualmente é possível não só utilizar caracteres acentuados em nomes de arquivos, como também “figurinhas” engraçadinhas (os Emojis). Porém, estas “modernidades” não são suficientemente padronizadas. E, consequentemente, acabam gerando conflitos com o conjunto de caracteres ASCII.
Para o contexto deste artigo (uploads no WordPress) os caracteres válidos para nomes de arquivos são as letras minúsculas de “a” a “z”, os numerais de “0” a “9”, o traço “-” (ou sinal de subtração) e o sublinhado “_”.
Falta de confiabilidade no backup
O primeiro problema potencial sobre os caracteres acentuados diz respeito aos backups, ou seja, às cópias de segurança dos sites.
Embora façamos todo o possível para garantir máxima compatibilidade entre os sistemas de arquivos dos servidores web e dos servidores de armazenamento, pode haver casos em que os caracteres acentuados impeçam os arquivos de serem salvos corretamente.
E este é um problema dificílimo de detectar! Pois normalmente só aparece quando acontece a necessidade de uma restauração e os arquivos não existem.
Falta de confiabilidade nos processos de migração
Migrações de sites são, em última análise, um processo completo de backup no servidor de origem e restauração na máquina de destino.
A lógica que implica que o backup perca confiabilidade no caso das cópias de segurança é exatamente a mesma. Ou seja, implica que os processos de migração estejam sob o risco de não serem completamente finalizados. E os caracteres acentuados podem ser um grande vilão!
Quebra de integridade da biblioteca de mídia
O terceiro problema potencial implicado pelo uso de caracteres especiais nos nomes de arquivos do WordPress diz respeito a casos um pouco mais específicos. Por exemplo, blogs muito grandes (e geralmente muito antigos) que precisam “descarregar” sua biblioteca de mídia para serviços externos.
Como se tratam de sistemas normalmente muito diferentes, potencializa-se qualquer possível inconsistência entre os conjuntos de caracteres de cada servidor.
Como resolver automaticamente o problema dos caracteres acentuados e especiais nos uploads
Felizmente, é bastante simples de se resolver o problema dos caracteres especiais no WordPress. Seja:
- usando plugins convencionais, um hack no
functions.php
; - ou um Must Use Plugin, um tipo de plugin especial, que não pode ser desativado a não ser pela exclusão do arquivo de código.
Contudo, não faremos nenhuma sugestão de plugin para obter este intento, pois a maioria deles são desnecessariamente complexos.
Para fazer com que seu WordPress remova automaticamente qualquer caractere especial, bem como converta automaticamente os nomes de arquivos para minúsculas, basta usar o código abaixo — que deve ser adicionado no functions.php
do template ou num arquivo no diretório /wp-content/mu-plugins
(o que você se sentir mais confortável — e certifique-se de saber o que está fazendo, para não causar problemas e erros em seu site.
<?php
function sanitize_filename_on_upload($filename) {
$today = date("Ymd");
$ext = explode('.', $filename);
$ext = end($ext);
$sanitized = preg_replace('/[^a-zA-Z0-9-_.]/','', substr($filename, 0, -(strlen($ext)+1)));
$sanitized = str_replace('.','-', $sanitized);
return $today . '-' . strtolower($sanitized.'.'.$ext);
}
add_filter('sanitize_file_name', 'sanitize_filename_on_upload', 10);
Code language: PHP (php)
Naturalmente, clientes da PortoFácil não precisam aventurar-se sozinhos nesta personalização. Ou seja, basta entrar em contato com nosso suporte, e será um prazer instalar o código acima da maneira correta em todos os seus sites e blogs.