Problema acentuação no navegador e php > 5.4 com padrão utf8

Bom dia,
Tive o prazer de aprender isto na prática e após RTFM.

Sintomas: No navegador aparecia caracteres estranhos das informações trazidas do banco.

Padrão: Página com header determinando padrão iso-8859-1, banco de dados em iso-8859-1, apache, php 5.5, Mariadb 10.

Solução:
Fiz o ajuste de charset no servidor web tanto para utf8 quanto iso-8859-1, mesmo erro de charset no navegador.
Fiz ajuste na conexão ao banco mysql tanto para utf8 quanto iso-8859-1, mesmo erro de charset no navegador.
Após incontáveis horas notei que ao exibir o código fonte renderizado no navegado sempre vinha em utf8.
Fiz um RTFM no manual do php a procura de mudanças.
Achei isto no core do php:

"default_charset string: In PHP 5.6 onwards, “UTF-8” is the default value and its value is used as the default character encoding for htmlentities(), html_entity_decode() and htmlspecialchars() if the encoding parameter is omitted. The value of default_charset will also be used to set the default character set for iconv functions if the iconv.input_encoding, iconv.output_encoding and iconv.internal_encoding configuration options are unset, and for mbstring functions if the mbstring.http_input mbstring.http_output mbstring.internal_encoding configuration option is unset.

All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn't overridden by a call to header().

[b]Setting default_charset to an empty value is not recommended[/b]."

Ou seja agora vem habilitado no php.ini a diretiva “default_charset string”.
Ela estava como utf8 que é o valor default.
E pelo visto à partir do php 5.6 algumas funções irão trabalhar como padrão utf8.
Ou seja se quiser usar iso-8859-1 nestas funções tem que especificar.
E não é bom deixar desabilitado esta diretiva segundo o manual do php.
Mesmo, assim desabilitei o default_charset string no php.ini e o navegador apresentou os acentos corretamente.

Moral da história: Ou você migra agora para utf8 ou mais tarde terá que mexer no seu código fonte para que algumas funções apresentem o caractere correto.
Espero ser útil há algum de vocês.

Importante observação, Alexandre. Valeu por compartilhar.

Show de bola Alexandre. Nem sabia que isso (“default_charset string”) existia.

Eu estou com um problema semelhante porém com particularidade.

No ambiente de desenvolvimento, esta tudo funcionando. Ao publicar os dados do banco vem todos desconfigurados. Fiz a comparação entre os dois bancos (desenvolvimento e produção) e esta a mesma coisa. Vale salientar que estava sempre funcionando. Foi só eu atualizar pra versão mais nova do SC que esta dando esse problema ao fazer upload da publicação.

É colegas de trabalho coisas do além acontece…
Veja o que acontece comigo a app estava funcionando normal. Fiz atualização do SC gerei e subi as app’s para minha surpresa tudo bangunçado os acentos.
Cada app estava definida como iso-8859-1 e o projeto também. Agora retirei todas as referencias das 150 app’s do charset deixei em branco só faço referência do charset nas valores padrões do projeto como iso-8859-1. Pois bem Algumas app’s ficam com caracteres estranhos e utras não. Agora tenho que verificar quais estão dando problemas e setar o valor também dentro da app’s como isso-8859-1. O que fazer?

Eu acho que é um BUG… estou tentando resolver tbm… se achar solução posto aqui. NM deveria dar atenção a isso, apesar que eu não tenho certeza se é Bug, porém esta aparecendo MUITA gente com o mesmo problema.

Acredito que seja bug. Se eu setei para iso-8859-1 porque devo fazer de novo dentro da app?

Se o caso for configuração de ambiente nem adianta a netmake olhar.
Isto é dever do desenvolvedor ou mantenedor do servidor.
Tem que configurar no apache/nginx, no mysql e agora também no php.ini.

Uma coisa é garantida, ambiente no meu caso não mesmo. Pois estava sempre funcionando, não cheguei a atualizar nada no ambiente.

[Resolvido]
Seguinte, para resolver, eu fui em: “Banco de dados” -> “Editar conexão” -> na aba “Avançado” eu mudei de “utf8” (tava padrão) para “latin1”.
Depois fui em todas as minhas aplicações e no charset coloquei: Western (ISO-8859-1).

Resolveu de boa. E não precisei mexer em nada no meu servidor.

Fred
Você fez a segunda opção que falei. mudou o charset da conexão.
Somente que ao invés de mudar de forma estática no my.cnf/my.ini.
Mudou de forma dinâmica na aplicação.

Eu ainda acho que é um Bug, pois antes funcionava perfeitamente e nunca alterei nada. Depois da última atualização esta com esse bug. Ficamos ansiosos esperando que as atualizações tragam coisas boas (consertos, novas implementações, etc…) mas esta ocorrendo ao contrário.

Parece que por padrão na instalação do SC o default_charset string já vem desabilitado. Verifiquei isso hoje. Isso no ambiente de desenvolvimento.

No php 5.4 ele vem desabilitado, somente no php 5.5 e 5.6 ele vem habilitado por padrão.
Por isto assunto no post php > 5.4

Fred,

Existe uma maneira de habilitar o ‘default_charset string’ no ScriptCase?

Fui em propriedades do projeto e alterei lá o charset.

Existe outro local para padronizar?

Se você usa linux…

Comando no Terminal:

gedit opt/NetMake/v8/components/apache/conf/php.ini

procure por default_charset string e é só tirar o “;” do inicio.

Mas acredito que isso não vá resolver! Eu testei com ele habilitado e desabilitado e não resolveu. Teste ai!

Fred,

Meu servidor de desenvolvimento é Windows. Já o ambiente de produção é Linux.

No meu caso, os dados estão indo pro banco sem acento, ficando com interrogação.

CHARSET nas aplicações, coloquei a ISO-8859-1 no ScriptCase.

No banco MySQL, deixei o padrão “COLLATE=‘latin1_swedish_ci’”.

Tens uma solução?

Versões no meu ambiente de produção:

Apache = 2.2.25
PHP = 5.2.17
MySQL = 5.5.38-35.2

Agradeço.

Não sei se é só comigo, mas acredito que depois que atualizei para a versão 8.1.046 esse problema do charset nas aplicações publicadas voltou a ocorrer. E não consigo de forma alguma! ! !

Veja qual sãos essas versões na hospedagem:
Apache = ??
PHP = ??
MySQL = ??

"default_charset string: In PHP 5.6 onwards, “UTF-8” is the default value and its value is used as the default character encoding for htmlentities(),
html_entity_decode() and htmlspecialchars() if the encoding parameter is omitted. The value of default_charset will also be used to set the default character
set for iconv functions if the iconv.input_encoding, iconv.output_encoding and iconv.internal_encoding configuration options are unset, and for mbstring functions
if the mbstring.http_input mbstring.http_output mbstring.internal_encoding configuration option is unset.
All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn’t overridden by a call to header().

Setting default_charset to an empty value is not recommended."

Após o lançamento do PHP 5.6 usar MySQL/MariaDb com SC, é recomendado alterar tudo para utf8 ou mais tarde terá que mexer no seu código fonte para que algumas
funções apresentem o caractere correto.

  • Dica para converter a hospedagem:
    ALTER DATABASE base_de_dados DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tabela DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tabela CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Veja qual sãos essas versões na hospedagem: Apache = ?? PHP = ?? MySQL = ??

"default_charset string: In PHP 5.6 onwards, “UTF-8” is the default value and its value is used as the default character encoding for htmlentities(),
html_entity_decode() and htmlspecialchars() if the encoding parameter is omitted. The value of default_charset will also be used to set the default character
set for iconv functions if the iconv.input_encoding, iconv.output_encoding and iconv.internal_encoding configuration options are unset, and for mbstring functions
if the mbstring.http_input mbstring.http_output mbstring.internal_encoding configuration option is unset.
All versions of PHP will use this value as the charset within the default Content-Type header sent by PHP if the header isn’t overridden by a call to header().

Setting default_charset to an empty value is not recommended."

Após o lançamento do PHP 5.6 usar MySQL/MariaDb com SC, é recomendado alterar tudo para utf8 ou mais tarde terá que mexer no seu código fonte para que algumas
funções apresentem o caractere correto.

  • Dica para converter a hospedagem:
    ALTER DATABASE base_de_dados DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tabela DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
    ALTER TABLE tabela CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

Opa Jailton. Seguinte. A única coisa que eu não fiz foi alterar as tabelas no banco pra UTF-8 isso pq no Oracle a instancia já está configurada para UTF-8 qualquer a base e as tabelas já pegam por padrão. Mudei uma a uma as aplicações pro UTF-8 e mesmo assim nada. O estranho que na versão 8.1.045 isso não acontecia. Só tinha configurado o charset nas propriedades do projeto com já fazemos de praxe e ia de boa. Foi atualizar a versão começou isso. A unica coisa que eu alterei foi a versão do SC. Porém em Desenvolvimento no SC está funcionando, mas em Produção que é um XAMPP não está mais funcionando.

Apache = 2.4.17
PHP = 5.5.37
Oracle = 10g

Então PHP 5.5 e no ORACLE 10g, ai não tenho como testar, vamos esperar alguém do suporte ou que use, dar um retorno no post.