Solução : WordPress e imagens com acentuação no Safari

Já vi esse problema acontecer mais de uma vez e acredito que não tenha encontrado uma solução — ou até mesmo algum relato parecido — porque no inglês (idioma largamente usado com o WordPress) não existe acentuação. Mas nos países que falam Português (ou qualquer outro idioma que possua acentos), um usuário ou outro acaba usando acentuação em nomes de arquivo. Ao fazer o upload de um arquivo desses e usar uma função como a wp_get_attachment_image para exibir a imagem, ela não é carregada no Safari (ao menos no Mac OS X). Ainda não consegui descobrir o motivo exato, pois em outros navegadores funciona como esperado.

Enfim, a solução é bem simples e baseia-se em um filtro.

add_filter('wp_get_attachment_image_attributes', 'ck_image_attrs');

function ck_image_attrs($attrs)
{
  foreach ($attrs as $name => $value)
  {
    if ('src' != $name)
    {
      break;
    }
    $attrs[$name] = ck_fix_image_url($value);
  }
  return $attrs;
}

function ck_fix_image_url($url)
{
  $parts = parse_url($url);
  $path = explode('/', $parts['path']);
  $path = array_map('rawurlencode', $path);
  $path = implode('/', $path);
  return str_replace($parts['path'], $path, $url);
}

Separei a lógica na função ck_fix_image_url para que possa ser usada em conjunto com a wp_get_attachment_image_src, por exemplo.

Advertisements

10 thoughts on “Solução : WordPress e imagens com acentuação no Safari

    1. No caso que me levou a escrever o post, apenas remover os acentos não resolveria, porque os arquivos já haviam sido carregados no WordPress, então fazer um request para “arquivo-com-acentuação.jpg” não é mesma coisa que para “arquivo-com-acentuacao.jpg”. De qualquer forma, para uma nova instalação, sem conteúdo, sua solução é mais simples e deve resolver, sim.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s