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