CHARSET PHP MSSQL

Enviada por LUIZ C M DE BRITO 
LUIZ C M DE BRITO
CHARSET PHP MSSQL
13 de February de 2012 às 12:17PM
Não consegui resolver o seguinte problema:

Implemento um sistema que deverá ler bancos de dados distintos

e fornecer saída de ambos.

banco 1:
ms sql server 2000 com Collation name =

SQL_Latin1_General_CP850_CI_AI

banco 2:
mysql com charset = latin1 e collation = latin1_swedish_ci


1. Em uma página php necessito exibir nomes lidos do banco 1

e também do banco 2 (ms sql server), utilizando echo

2. ao obter a página gerada os nomes acentuados do html saem

corretos, porém as palavras lidas do banco sql server não saem

corretamente, em lugar dos caracteres acentuados são exibidos

outros bem diferentes.

3. utilizo no início da página php o seguinte código:

<meta http-equiv="Content-Type" content="text/html;

charset=latin1"/>

Aonde se encontra o problema e qual a solução?


obs: no início da página php coloquei as seguintes linhas

setlocale(LC_ALL, "pt_BR");
header('Content-type: text/html; charset=cp850');

funcionou para as palavras do banco de dados sql server, porém

bagunçou as acentuações html, ou seja, inverteu o problema.

e aí pessoal ... ???!

ajudem-me por favor ...
Lucas Tiago de Moraes
Re: CHARSET PHP MSSQL
13 de February de 2012 às 01:53PM
olha qual banco de dados está com menos informações, e trata converte o mesmo.

tente isso:
header('Content-type: text/html; charset=utf-8');

Falou.
LUIZ C M DE BRITO
Re: CHARSET PHP MSSQL
13 de February de 2012 às 02:20PM
Caro Lucas,

Necessito dos 2 bancos de dados. Devo acessar o ms-sqlserver e gerar saída tanto em página quanto no banco mysql. Usando charset='<conjunto de caracteres>' funcionam as saídas de texto do html, do php e a gravação no mysql.

O problema é apenas com um texto qualquer lido do ms-sqlserver. Esse texto vem com acentuação errada. Ao usar no início da página php o seguinte código:

setlocale(LC_ALL, "pt_BR");
header('Content-type: text/html; charset=cp850');

como já disse, funcionou a acentuação lida do ms-sqlserver, porém bagunçou a do html e as saídas do php.

Acho que a questão é: como converter o texto lido do ms-sqlserver para o conjunto de caracteres padrão do php com acentuação correta ?

Ou responder algo como: Como decodificar uma string lida do ms-sqlserver?

Já tentei utf8_encode e utf8_decode e não funcionaram.

Obrigado pela atenção.
Lucas Tiago de Moraes
Re: CHARSET PHP MSSQL
13 de February de 2012 às 04:12PM
remova isso:
setlocale(LC_ALL, "pt_BR");
header('Content-type: text/html; charset=cp850');

e coloque isso no html:
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

Falou.
LUIZ C M DE BRITO
Re: CHARSET PHP MSSQL
14 de February de 2012 às 06:37AM
Lucas,

Isso q vc sugeriu, não funciona. Piora: aí então tanto as palavras do html e do php quanto as do banco ms sqlserver ficam com acentuação errada !

Minha questão parece não ter solução simples ...
Marcos Regis
Re: CHARSET PHP MSSQL
14 de February de 2012 às 09:36AM
Seu problema parece ser o fato de seus arquivos .php estão todos em utf-8

Se estiver usando eclipse selecione o seu projeto e dê um ALT+ENTER para exibir as propriedades e altere o default charset para ISO-8859-1.

Nota: Em HTML não se deve usar acentos e sim suas respectivas entidades.
LUIZ C M DE BRITO
Re: CHARSET PHP MSSQL
15 de February de 2012 às 06:25AM
Prezado Marcus,

Uso dreamweaver para criar meus arquivos php. Eventualmente uso bloco de notas para alguma alteração.

Minhas páginas tem conteúdo para exibição mista dos seguintes:

1.textos html
2.textos de saídas echo do php
2.1 saídas de textos comuns
2.2 saídas de strings lidos de um banco mysql
2.3 saídas de strings lidos de um banco ms sqlserver

Em 2.3 é que está o problema ! Ao ler do banco ms sqlserver e exibir o nome via echo do php a saída sai com acentuação incorreta.

Como já especifiquei na minha primeira mensagem desse tópico,

banco 1:
ms sql server 2000 com Collation name =

SQL_Latin1_General_CP850_CI_AI

banco 2:
mysql com charset = latin1 e collation = latin1_swedish_ci

Obg pelo apoio.
Marcos Regis
Re: CHARSET PHP MSSQL
15 de February de 2012 às 08:41AM
Pela sua resposta você não sabe do que estou falando.

Não uso Dreamweaver desde a versão MX.
Abra seus scripts .php em um BOM editor de texto como o Notepad++ ou o Textpad.
No Notepad++ (em português) tem o item de menu [Formatar]
Acesse-o, vá até [Conjunto de Caracteres], [Europa Ocidental], [ISO-8859-1].

Quando alterar, verifique se algum caracter especial fica errado.

Para imprimir texto do Banco de Dados em uma página HTML o ideal é usar

echo htmlentities($texto);

Pois desta forma você não precisa se preocupar em qual charset a informação do banco está.

Para um controle ainda maior pode usar isto

echo htmlentities(mb_convert_encoding($texto_do_bd, "ISO-8859-1",mb_detect_encoding($texto_do_bd)));
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.