Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Felipe Resende

Acentuação arquivo executado pelo Crontab

Recommended Posts

Bom dia!
Estou com um problema em um arquivo que é executado pelo CRONTAB.

Quando existe uma inserção no banco (oracle) em um campo do tipo varchar2, os caracteres especiais, acentuação, ficam com um ponto de interrogação.

O tipo de linguagem do banco, do servidor php e da página estão todos iguais, ISO-8859-1.

Alguém sabe o que pode ser?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então, depende do local que você está usando essas funções, pois não deveria dar errado.

 

No seu PHP, tente adicionar o seguinte:

 

 

 

header("Content-Type: text/html; charset=ISO-8859-1",true);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já adicionei este header também e não deu certo.

 

O problema está sendo o seguinte: Quando executo o arquivo pelo browser dá certo. Entretando, quando o arquivo é executado pelo CRONTAB



...não dá certo. Fica assim: "Acentua¿¿o" no lugar de "Acentuação".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho, nunca tive problemas com o CRONTABS nesse quesito.

 

Mude então direto no php.ini

 

Procure:

 

 

 

; PHP's default character set is set to empty.
; http://php.net/default-charset
;default_charset = "iso-8859-1"

Descomente a última linha reinicie o apache. Caso seja servidor, faça um arquivo php.ini e insira essas informações dentro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O crontab está chamando de que forma ?

Pelo modo CLI ou pela URL ?

Pressuponho que esteja pelo modo CLI.

 

Analise como está o charset interno no momento da execução. Com isso terá uma idéia do que pode estar ocorrendo.

echo mb_internal_encoding(); exit;

Se o resultado for diferente do encode latin-iso, então force o encode em tempo de execução ou já deixe isso definido no bootstrap do aplicativo:

 

mb_internal_encoding('ISO-8859-1');

http://www.php.net/manual/en/function.mb-internal-encoding.php



Detecta o encoding de uma string específica.. útil para testar integridade dos parâmetros:

echo 'encode: ' . mb_detect_encoding( $str ); exit;

 

Veja também as funções iconv

Compartilhar este post


Link para o post
Compartilhar em outros sites

no desespero você pode tentar remover a acentuação:

 

function remove_accents($str)
{ 
    $de = array(
        "á", "à", "â", "ã", "ä", "é", "è", "ê", "ë", "í", "ì", "î", "ï", 
        "ó", "ò", "ô", "õ", "ö", "ú", "ù", "û", "ü", "ç", "Á", "À", "Â", 
        "Ã", "Ä", "É", "È", "Ê", "Ë", "Í", "Ì", "Î", "Ï", "Ó", "Ò", "Ô", 
        "Õ", "Ö", "Ú", "Ù", "Û", "Ü", "Ç"
    ); 
    $para = array(
        "a", "a", "a", "a", "a", "e", "e", "e", "e", "i", "i", "i", "i", 
        "o", "o", "o", "o", "o", "u", "u", "u", "u", "c", "A", "A", "A", 
        "A", "A", "E", "E", "E", "E", "I", "I", "I", "I", "O", "O", "O", 
        "O", "O", "U", "U", "U", "U", "C"
    );
    return  str_replace($de, $para, $str); 
} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hinom,

 

o mb_internal_encoding está vindo UTF-8. Utilizei o mb_internal_encoding para alterar para o 'ISO-8859-1' e não deu certo.

 

Aí utilizei também o mb_detect_encoding para descobrir qual era a codificação da variável, e ela está UTF-8.

Existe alguma forma de converter a string que está na variável também?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mesmo definindo o mb_internal_encoding('ISO-8859-1'); não deu certo.

 

Estou inserindo o seguinte valor:

 

$texto = 'áÁãÃâÂàÀéÉêÊíÍóÓõÕôÔúÚçÇ';

Utilizo a variável $texto para inserir o valor no banco.

 

Obs.: Não ocorre o erro quando imprimo alguma frase no arquivo, ou quando envio por e-mail.



Pegando a variável iconv_get_encoding() está tudo assim:

 

[input_encoding] => ISO-8859-1
[output_encoding] => ISO-8859-1
[internal_encoding] => ISO-8859-1

Compartilhar este post


Link para o post
Compartilhar em outros sites

não entendi de onde vem essa variável em UTF8..

 

é uma entrada de usuário ?

provém de arquivos texto ? de banco de dados ??

 

se está executando em modo CLI pelo CRON, imagino que não seja uma entrada via GET ou POST.. então, de onde vem essa variável ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a variável que vem do banco de dados está vindo como utf-8, há algum problema aí no meio do caminho ou no banco..

 

no início do tópico vc afirmou que o banco está como latin-iso... mas como pode a variável vir como utf8 deum dado provindo do banco de dados ?

 

logo após conectar ao banco, aplique mb_detect_encoding mesmo antes de atribuir a variável.. apenas para ter certeza.

 

 

pode ser inclusive alguma configuração no banco como o SET NAMES, por exemplo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.