Jump to content
Fórum Script Brasil
  • 0

PHP não envia acentos ao banco Mysql


Thiago Afonso Penna

Question

Boa tarde, pessoal!

Instalei o sistema de Help-Desk (abertura de chamados) OCOMON 2.0-RC6 e estou tendo o seguinte problema:

O PHP busca as palavras acentuadas do banco e as exibe normalmente, isso prova que o banco aceita acentos e 'ç' e o PHP os exibe. Sem problemas.

A questão é que só consigo inserir palavras acentuadas ou com 'ç' no banco pelo phpmyadmin ou mysql (cli). Pelo sistema OCOMON direto eu não consigo.

Está ocorrendo algum problema no envio dos dados contidos nos campos, isto é, quando o PHP envia para o banco.

Se eu digitar em descrição: "Usuário entrou em contato informando que sua impressora parou de imprimir.", nenhum dado será inserido no banco no campo 'descricao' devido ao acento da palavra 'usuário'.

Já tentei de tudo (mudar o collation - utf-8, latin1, iso-8859-1)... tá osso... ajudem please.

MySQL 5.5.28 + PHP 5.4.3

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

Verifique o collation que você está usando no bd. O bd aceita acentuacao, mas depende do collation...

Eu uso 'latin1_swedish_ci'

se você estiver usando o phpmyadmin, faca o seguinte para alterar o collation:

va para a database a ser modificada => operacoes => Collation: latin1_swedish_ci(bem embaixo da página) => executar

se você quiser fazer isso atraves do proprio mysql, escreva o seguinte codigo:

ALTER DATABASE `nome_database` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Espero que ajude...

qualquer duvida posta ai

Link to comment
Share on other sites

  • 0
Verifique o collation que você está usando no bd. O bd aceita acentuacao, mas depende do collation...

Eu uso 'latin1_swedish_ci'

se você estiver usando o phpmyadmin, faca o seguinte para alterar o collation:

va para a database a ser modificada => operacoes => Collation: latin1_swedish_ci(bem embaixo da página) => executar

se você quiser fazer isso atraves do proprio mysql, escreva o seguinte codigo:

ALTER DATABASE `nome_database` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Espero que ajude...

qualquer duvida posta ai

OK!, neste momento é exatamente este collation que estou usando (latin1_swedish_ci). Já identifiquei que o bd aceita sim o acento, e quando insiro no bd pelo phpmyadmin, o sistema até busca o campo e exibe normalmente. Eu não estou conseguindo inserir palavras/frases acentuadas pelo campo do sistema. Esse é o problema.

Obrigado pela atenção.

Link to comment
Share on other sites

  • 0
OK!, neste momento é exatamente este collation que estou usando (latin1_swedish_ci). Já identifiquei que o bd aceita sim o acento, e quando insiro no bd pelo phpmyadmin, o sistema até busca o campo e exibe normalmente. Eu não estou conseguindo inserir palavras/frases acentuadas pelo campo do sistema. Esse é o problema.

Obrigado pela atenção.

Qual o charset que voce esta usando na pagina?

Link to comment
Share on other sites

  • 0

Fala home...

eu estava com o mesmo problema, porque o painel admin do php, cpanel, não estava aceitando acentuação e assim pelo ftp direto eu consegui up sem erros.

Veja quando for salvar seu script embaixo ao colocar o nome, veja em converter, não salve como unicode ou UTF-8, porque eles não reconhecem acentuação. deixe default mesmo.

Eu tentei por várias vezes, pedi ajuda ao provedor central, porque achava que o erro poderia estar neles, mas não era, era na hora de salvar.

Quando deixei em default tudo se resolveu, porque ele reconhece como verdadeiro.

Bom, espero ter ajudado...

abraços.

Link to comment
Share on other sites

  • 0

ou pode-se mudar a codificação da página para ISO-8859-1 e quando resgatar os campos de textos pode usar o comando utf8_encode();

na hora de printar na tela, é só usar o comando utf8_decode();

sempre fiz assim e nunca deu problema.. eu particularmente acho melhor do que ficar mexendo no char set do banco de dados que pode dar algum problema pior ainda.

Link to comment
Share on other sites

  • 0

Cara uma coisa que me ajuda bastante e passar alguns parametros a mais na hora de fazer a conexão com o banco de dados

header('Content-Type: text/html; charset=utf-8');
mysql_connect('127.0.0.1', 'user', 'senha') or die(mysql_error());
mysql_select_db('banco') or die(mysql_error());

mysql_query("SET NAMES 'utf8'");
mysql_query('SET character_set_connection=utf8');
mysql_query('SET character_set_client=utf8');
mysql_query('SET character_set_results=utf8');

Link to comment
Share on other sites

  • 0

Na verdade tanto o ISO-8859-1 e o UTF8 aceitam acentos.

A codificação ISO-8859-1 aceita todos os caracteres latinos, inclusive os acentuados.

A codificação UTF8 aceita uma porrada de caracteres gregos, russos, se não me engano chinês simplificado também, inclusive todos os caracteres latinos acentuados ou não.

O que acontece é que para que a acentuação apareça corretamente todos os pontos por onde os dados passam devem estar em uma única codificação.

Esses pontos são:

Banco de dados,

Apache,

Arquivo que irá ler os dados,

Meta dado charset enviado ao navegador

Eu uso só ISO-8859-1, mas se você quiser usar UTF8 também dará certo desde que TODOS os pontos estejam na mesma codificação.

O Banco pode ser visto pelo phpMyAdmin ou pelo comando (se o seu usuário tiver acesso ao banco information_schema):

SELECT * FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'nome_do_bd' AND TABLE_NAME = 'nome_da_tabela';

No Apache eu utilizo um código no arquivo htaccess(Só funciona se as configurações do apache permitirem o htaccess para a sua hospedagem):

AddDefaultCharset ISO-8859-1

Para que o htaccess seja permitido a opção "AllowOverride", que no apache2, no linux, está no arquivo /etc/apache2/sites-available/default, tem que estar com o valor "All"
A forma de ver e mudar o Arquivo que irá ler os dados vai dependender de programa para programa.
E por fim:
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
Link to comment
Share on other sites

  • 0

Boa noite a todos!

Estou com o mesmo problema há alguna dias e ainda não consegui resolver, já verifiquei o arquivo "charset" do apache, o php.ini da pasta php5, tentei colocar a decodificacao direto na pagina que faz a conexao com o banco e sem sucesso!

Mas reparei que no meu caso, estou usando o debian 7 + php5 + mysql 5.5, quando eu conecto no banco de dados e rodo o comando "status" o charset do servidor e diferente do cliente, pode isso?

Se alguém conseguiu resolver e puder ajudar agradeceria muito!

Abraços!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152k
    • Total Posts
      651.6k
×
×
  • Create New...