Autor Tópico: [Resolvido] Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5  (Lida 11354 vezes)

Jailton

  • Expert
  • *****
  • Mensagens: 2034
[Resolvido] Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Online: Novembro 28, 2013, 09:34:36 pm »
Amigos, atualizei para o SC 7.1.012 no meu PC desenvolvimento esta normal, grava os dados do campo
e recupera em um banco de Dados MySQL (latin1-swedish-ci).


Quando público no KINGHOST que usa uma base idêntica MySQL 5.5 (latin1-swedish-ci), fazendo um
teste de edição pelo PhpMyAdmin do PAINEL do KINGHOST e gravando dados com acentos normal grava e lê.

Agora se eu usar o SCRIPTCASE produção que já esta no servidor WEB que atualizei para 5.4 ele não consegue
nem ler o que já tava gravado certo com acento e se tentar gravar um campo com acento ele nem grava
certo.

Meus formulários do SC estão como: Portuguese - ISO-8859-1 normal igual estava antes de atualizar para o SC 7.1 -5.4

Alguém mais com este problema?
« Última modificação: Novembro 10, 2014, 03:09:46 pm por Yuri Esteves »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #1 Online: Novembro 28, 2013, 10:10:20 pm »
Amigos, atualizei para o SC 7.1.012 no meu PC desenvolvimento esta normal, grava os dados do campo
e recupera em um banco de Dados MySQL (latin1-swedish-ci).


Quando público no KINGHOST que usa uma base idêntica MySQL 5.5 (latin1-swedish-ci), fazendo um
teste de edição pelo PhpMyAdmin do PAINEL do KINGHOST e gravando dados com acentos normal grava e lê.

Agora se eu usar o SCRIPTCASE produção que já esta no servidor WEB que atualizei para 5.4 ele não consegue
nem ler o que já tava gravado certo com acento e se tentar gravar um campo com acento ele nem grava
certo.

Meus formulários do SC estão como: Portuguese - ISO-8859-1 normal igual estava antes de atualizar para o SC 7.1 -5.4

Alguém mais com este problema?

Se eu não me engando o php 5.4 já veio com o padrão UTF-8.
tente encontrar a linha de charset que está documentada e alterar para ISO-8859-1

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #2 Online: Novembro 29, 2013, 08:41:22 am »
O Scriptcase não tem onde indica também qual o CharSet que esta a base de dados?


Problemas com Charset? Nunca mais 

Artigo que apresenta os principais problemas com codificação de caracteres e mostra o passo a passo de como definir o charset (encoding) UTF-8 para todas as áreas dos seus projetos PHP.


Introdução

Vira e mexe existe alguém aparecendo com problemas com apresentação de caracteres por conta de codificação de caracteres errada. Já escrevi sobre Unicode, Códigos e Símbolos Unicode e sobre HTML entities. Mas neste artigo, veremos como utilizar UTF-8 em tudo e nunca mais ver caracteres sendo exibidos errado.
 
--------------------------------------------------------------------------------


1º Salve o código-fonte em UTF-8

Antes de mais nada, escolha um bom editor de código-fonte, que lhe permita definir qual a codificação utilizada nos arquivos salvos. Normalmente isso fica nas configurações do editor ou nas opções do momento de salvar. Se você usa editores em modo texto (vi, nano, pico, etc), talvez seja necessário configurar isso nas configurações do próprio terminal de comandos (gnome-terminal, xterm, etc).

Observação: alguns editores tem opção de salvar o arquivo com o BOM. Recomenda-se que não inclua estes bytes, pois eles podem causar comportamento inesperado no PHP. Por exemplo, você não vai conseguir chamar funções como header ou utilizar o recurso de namespaces, que obriga que a declaração de namespace seja a primeira coisa no script.

--------------------------------------------------------------------------------


2º Informe ao navegador que você usa UTF-8

Quando um arquivo PHP gera um HTML e é enviado para o navegador, junto com o arquivo vai um cabeçalho (do protocolo HTTP), onde é especificado o tipo de arquivo e a codificação. Caso você não informe ela explicitamente no seu código, o seu servidor HTTP (por exemplo, o Apache) irá enviar tal arquivo com um mime-type padrão (normalmente "text/html") e uma codificação padrão (normalmente "ISO-8859-1").

Para mudar este cabeçalho explicitamente, e informar corretamente o mime-type e a codificação do documento que você está gerando, utilize a função header, passando a diretiva "Content-type", conforme exemplo:
<?php
header('Content-Type: text/html; charset=UTF-8');
echo '<html>';
...


Caso o arquivo seja de outro tipo, basta mudar o mime-type para o tipo correspondente (por exemplo, "text/css", "text/xml", "application/xhtml+xml", etc).

Porém, nem sempre os arquivos são gerados via PHP. Existem HTML estáticos que precisam informar o cabeçalho HTTP com o mime-type e codificação corretos. Neste caso, existe uma alternativa que é usando a tag meta com o atributo "http-equiv" (equivalente HTTP). Com ela, é possível "simular" cabeçalho do HTTP pelo próprio conteúdo do documento HTML. Isso é feito da seguinte forma:
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
...


No HTML 5, isso foi simplificado:
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="UTF-8" >
...


Caso você utilize XML ou XHTML, lembre-se de informar a codificação UTF-8 no cabeçalho XML:
<?xml version="1.0" encoding="UTF-8" ?>


--------------------------------------------------------------------------------


3º Comunique-se com o BD via UTF-8

Para que as informações sejam trafegadas entre o PHP e o Banco de Dados usando UTF-8, é preciso declarar esta codificação logo que se conecta ao banco. Isso varia de banco para banco, mas vamos ver alguns exemplos comuns:

MySQL (PDO):
$dsn = "mysql:host=localhost;dbname=world;charset=utf8";
$opcoes = array(
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8'
);
$pdo = new PDO($dsn, $usuario, $senha, $opcoes);
...


MySQLi:
$mysqli = new mysqli(...);
$mysqli->set_charset('utf8'));


MySQL (funções):
$conexao = mysql_connect(...);
mysql_select_db(...);
mysql_set_charset('UTF8', $conexao);
...


Observação: as funções de conexão com MySQL estão depreciadas. Prefira usar PDO ou MySQLi.

PostgreSQL (PDO):
$pdo = new PDO(...);
$pdo->query('SET NAMES UNICODE');
...


PostgreSQL (funções):
$conexao = pg_connect(...);
pg_set_client_encoding($conexao, 'UNICODE');
...


--------------------------------------------------------------------------------


4º Crie seu Banco de Dados em UTF-8

Os campos de texto armazenados em bancos de dados também precisam de uma codificação de caracteres. Caso não seja definida no momento que se cria o campo, a codificação é obtida do padrão da tabela ou do bando de dados. Para definir um valor padrão de codificação de um banco de dados, use os comandos:

MySQL:
CREATE DATABASE nome_bd CHARACTER SET UTF8;


PostgreSQL:
CREATE DATABASE nome_bd ENCODING UNICODE;


--------------------------------------------------------------------------------


5º Lembre-se de especificar a codificação UTF-8 onde puder

Algumas funções em PHP recebem como parâmetro a codificação a ser considerada. Algumas das mais importantes que devem ser ressaltadas são: htmlentities e htmlspecialchars.

Além disso, ao realizar operações com expressões regulares PCRE, lembre-se de utilizar o modificador "u" ao final da expressão, indicando que ela é UTF-8, conforme o exemplo:
preg_match('/^[a-z](.*)/u', $str, $matches);


Um conjunto importante de funções, leva em consideração a localidade (com uma codificação) para funcionar. Então, também é importante definir a localidade adequadamente com a localidade UTF-8:
setlocale(LC_ALL, 'pt_BR.utf8');


Lembre-se que a localidade depende do servidor e o nome utilizado pode variar.

--------------------------------------------------------------------------------


Conclusão

Tomando as devidas medidas, é possível utilizar UTF-8 sem grandes problemas em todas as camadas do seu sistema: no HTML, no PHP e no Banco de Dados. Erro de codificação? Nunca mais!


Já que o PHP 5.4 esta vindo com o CharSet UTF8 como padrão era melhor a gente se adaptar, mas
o SC teria que na hora de conectar a base poder escolhero CharSet também?
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Almeida

  • Expert
  • *****
  • Mensagens: 610
    • Email
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #3 Online: Novembro 29, 2013, 08:47:29 am »
Na conexão do SC tem como escolher, não sei se funciona!!
O banco de dados também tem uma opção de definir o charset de retorno, "Apanhei muito pra isso";
No php.ini tem a linha "charset" aonde no PHP 5.4 já vem comentada e com padrão UTF-8;
Ao criar um projeto no SC tem como definir o charset das aplicações;
No apache tem como definir o charset; Explicação tópico respondido pelo Saulo;

Creio que seu problema está apeans no PHP.ini de produção, tente mudar linha que te falei e veja se funciona.

Att.
Eliezer Almeida
eliezeralmeidago@hotmail.com
www.infotecsoft.com.br - Modernidade e Eficiência

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #4 Online: Novembro 29, 2013, 11:29:10 am »
Na conexão do SC tem como escolher, não sei se funciona!!
O banco de dados também tem uma opção de definir o charset de retorno, "Apanhei muito pra isso";
No php.ini tem a linha "charset" aonde no PHP 5.4 já vem comentada e com padrão UTF-8;
Ao criar um projeto no SC tem como definir o charset das aplicações;
No apache tem como definir o charset; Explicação tópico respondido pelo Saulo;

Creio que seu problema está apeans no PHP.ini de produção, tente mudar linha que te falei e veja se funciona.

Almeida grato, mas a hospedagem é compartilhada e eu não posso alterar o php.ini.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Alexandre Pereira Bühler

  • Expert
  • *****
  • Mensagens: 1641
  • Nunca estabeleça um teto para os seus rendimentos.
    • Simão & Bühler Ltda
    • Email
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #5 Online: Novembro 29, 2013, 08:51:10 pm »
Para o apache pode fazer isto aqui:
http://omeublog.net/index.php?title=usando_htaccess_para_configurar_o_http_c&more=1&c=1&tb=1&pb=1
Para o php pode fazer isto dentro do htaccess (http://stackoverflow.com/questions/6987929/preparing-php-application-to-use-with-utf-8):

########################################
# Locale settings
########################################

SetEnv   LC_ALL  nl_NL.UTF-8

########################################
# Set up UTF-8 encoding
########################################

AddDefaultCharset UTF-8
AddCharset UTF-8 .php

php_value default_charset "UTF-8"

php_value iconv.input_encoding "UTF-8"
php_value iconv.internal_encoding "UTF-8"
php_value iconv.output_encoding "UTF-8"

php_value mbstring.internal_encoding UTF-8
php_value mbstring.http_output UTF-8
php_value mbstring.encoding_translation On
php_value mbstring.func_overload 6


Obs: É claro troque UTF-8 pelo charset que você quer.

« Última modificação: Novembro 29, 2013, 08:52:41 pm por Alexandre Pereira Bühler »
--
Alexandre Pereira Bühler
https://www.simaoebuhler.com.br
Hospedagem compartilhada Scriptcase desenvolvimento e produção. Temos servidores dedicados Scriptcase.
Eu RTFM todo dia e você?

Jailton

  • Expert
  • *****
  • Mensagens: 2034
Re:Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #6 Online: Novembro 29, 2013, 10:44:08 pm »
OK... RESOLVIDO.


Receita do BOLO:
Na conexão da Produção do SCRIPTCASE selecione UTF8.
Advanced > client_encoding

Nas suas aplicações configure para Usar Unicode-UTF8.
Aplicação > Configuração > Charset

E o mais incrível, o BANCO lá no MySQL da hospedagem esta (latin1-swedish-ci)

* Lê o que já tinha e grava e recupera o novo de boa também.

O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

silviomld

  • Novato
  • *
  • Mensagens: 14
    • Email
Re:[Resolvido] Bug ACENTOS 7.1. (PHP 5.4) BANCO DE DADOS MySQL 5.5
« Responder #7 Online: Novembro 06, 2014, 09:45:07 pm »
Estou tentando resolver o problema de acentos com
SC8 e MySQL

Vejam o que fiz: http://www.paraenses.com.br/testeutf8/problema_acentos_SC8.pdf

Peço encarecidamente que me ajudem!!!