Problema com acentos na classe upload do Codeigniter
Tentarei explicar de forma simples como resolver o problema que encontramos quando fazemos upload de arquivos com acentos usando a classe upload do codeigniter.
Não vou entrar em detalhes do funcionamento do framework neste post, desta forma suponho que o leitor saiba que existem duas pastas libraries, uma dentro da pasta application e outra na pasta system. Na librarie da pasta application geralmente temos as livrarias da nossa aplicação e também as livrarias extendidas da pasta librarie que fica dentro da pasta system, ufa.
Muitos aconselhariam fazer uma livraria extendida da classe Upload para não alterar a classe Upload do core. Eu particularmente preferi alterar direto no core já que retirar acentos de arquivos é sempre necessário e deveria vir por padrão no Codeigniter.
Vamos a prática:
- Abra o arquivo Upload .php localizado na pasta libraries dentro da pasta system.
- Logo no inicio, abaixo de “class CI_Upload {” existem varias variáveis. Crie abaixo destas variáveis uma nova, exemplo:
var $remove_acentos = TRUE;
o valor deve ser TRUE, indicando que esta função deve ser executada por default, ou seja por padrão toda vez que a classe for usada.
- O próximo passo é criar a função anterior. Esta função pode ser feita de diversas formas, escolhi a que julgo melhor:
if ($this->remove_acentos == TRUE)
{
$str = array('/[ÂÀÁÄÃ]/' => 'A',
'/[âãàáä]/' => 'a',
'/[ÊÈÉË]/' => 'E',
'/[´`^~]/' => '_',
'/[êèéë]/' => 'e',
'/[ÎÍÌÏ]/' => 'I',
'/[îíìï]/' => 'i',
'/[ÔÕÒÓÖ]/' => 'O',
'/[ôõòóö]/' => 'o',
'/[ÛÙÚÜ]/' => 'U',
'/[ûúùü]/' => 'u',
'/ç/' => 'c',
'/Ç/' => 'C',
'/ñ/' => 'n',
'/Ñ/' => 'ñ'
);
$this->file_name = preg_replace(array_keys($str), array_values($str),$this->file_name);
}
- Caso você ainda encontre problemas, pode ser por causa da codificação que esta usando, neste caso acrescente no final da função a função utf8_decode() do php , ficando assim:
$this->file_name = preg_replace(array_keys($str), array_values($str), utf8_decode($this->file_name));
Este método funciona 100% e com isso os arquivos que forem enviados por upload no codeigniter não causarão mais erros.
Qualquer duvida os comments estão ai :D
1 Comentário.
Primeira impressão do windows seven
Instalei neste último fim de semana a versão ultimate do windows seven, ou windows 7 como preferirem.
A primeira vista gostei bastante, o visual é semelhante ao do windows vista, porém aparentemente muito mais rápido. Claro que o visual não é a coisa mais importante, pelo menos para mim. Sempre acabo deixando com o visual clássico do windows.
O único problema que encontrei (por enquanto) foi para encontrar o driver para rede wireless. No meu caso o windows seven não encontrou automaticamente o driver RTL8187. Se este for o seu caso encontrei uma solução neste site.
Espero não me decepcionar com o windows seven como me decepcionei com o vista.
Agora tenho que copiar meus arquivos antigos e instalar novamente todos os programas.
Sem comentários.
Conditional comments para o IE8
Talvez você já tenha ouvido falar em conditional comments e já tenha inclusive usado em seus projetos. Caso nunca tenha nem ouvido falar, recomendo um artigo do revolucao.etc que explica muito bem sobre o assunto.
O que acontece é que os utilizamos para corrigir bugs de css que ocorrem no Internet Explorer. Praticamente todas as versões anteriores ao IE8, que também não é lá essas coisas (faça o teste acid3), dão dores de cabeça para os desenvolvedores.
Entretanto o IE8 corrigiu muitas das antigas falhas e dificilmente precisamos do conditional comments para corrigi-los, é ai que esta o problema.
Antes utilizávamos algo parecido com o código abaixo:
<!--[if IE]>
<link href=”css/cssbugie.css” rel=”stylesheet” type=”text/css” />
<![endif]–>
O problema é que se esse código for utilizado e o usuário estiver usando o IE8, o site provavelmente vai renderizar com algum erro, já que o IE 8 não necessita das correções.
A solução desse problema é muito simples, basta substituir a linha acima por essa:
<!--[if lt IE 8]>
<link href=”css/cssbugie.css” rel=”stylesheet” />
<![endif]–>
A linha acima quer dizer que apenas as versões anteriores ao IE8 interpretarão o arquivo cssbugie.css.
O que me levou a escrever este artigo, é que muitos sites que utilizam conditional comments foram testados no IE7 e seus antecessores, mesmo após o lançamento do IE8 alguns códigos não foram atualizados. Consequência, muitos sites estão sendo renderizados errado.
2 Comentários.
