Pergunta

Como posso saber o que a codificação será usado pelo PHP quando o envio de dados para o navegador? Ou seja, com o cabeçalho cotent-tipo, por exemplo:. iso-8859-1

Foi útil?

Solução

Normalmente servidores Apache + PHP de webhosters são configurados para enviar NÃO charset cabeçalho . O caminho mais curto para testar como seu servidor está configurado são:

  • essa ferramenta para ver o cabeçalho servidor obtendo qualquer uma de suas páginas no seu webiste . Se nos cabeçalhos de servidor que você ver um charset significa que o servidor está usando, geralmente ele não irá conter charset.
  • Outra maneira é para executar este script simples em seu servidor:. <?php echo ini_get('default_charset'); ?> Como dito acima o que normalmente imprime uma cadeia vazia, se for diferente ele irá mostrar-lhe o charset do PHP

A 2ª solução é supondo Apache não está configurado com AddDefaultCharset some_charset que não é geralmente o caso, mas, nesse caso, eu sou definição medo Apache pode substituir PHP deafult_charset directiva ini.

Outras dicas

Você pode usar a solução header () que William sugeriu, no entanto, se você estiver executando o Apache, ea configuração do Apache está usando um conjunto de caracteres padrão, que vai ganhar cada vez (Internet Explorer vai ficar louco) Ver: AddDefaultCharset

Tenha em mente que tipos de conteúdo e codificações são duas coisas diferentes. text / html é um tipo de conteúdo; ISO-8859-1 e UTF-8 são codificações.

O cabeçalho de resposta HTTP que o servidor envia normalmente se parece com isso:

Content-Type: text/html; charset=utf-8

"charset" é na verdade a codificação de caracteres. Não é em um cabeçalho separado; no entanto, há um cabeçalho chamado "Content-Encoding", que na verdade especifica que tipo de compressão dos usos de resposta (por exemplo gzip).

Se você quiser alterar a codificação de caracteres para UTF-8, em um arquivo que contém HTML:

<?
header("Content-Type: text/html; charset=utf-8");

Você pode definir o seu próprio com header('Content-type: xxx/yyy');, mas acredito que text / html é enviado por padrão.

AFAIK, PHP envia cordas bytewise. isto é, se as suas variáveis ??segurar UTF-8, ele irá enviar UTF-8. se você tiver iso-8859-1, ele irá enviar isso também. se você misturá-los, não vai ser bonito.

Se o servidor não está configurado para ter um conteúdo padrão ou charset, e nem é PHP, PHP irá enviar apenas Content-Type: text/html - não vai especificar um conjunto de caracteres em tudo, e irá enviar os bytes como ele vê-los no script .

Se um navegador recebe uma página sem charset especificado, várias coisas podem acontecer:

  • a maioria dos navegadores têm um menu "Codificação / Charset"; se o usuário selecionar explicitamente um, o navegador irá tentar aplicá-la. não acontece com muita freqüência, por isso:
  • alguns navegadores tentar torná-lo com um charset padrão (que é locale-dependente, por exemplo, para FF e cs_CZ que costumava ser iso-8859-2; YMMV)
  • IE irá tentar determinar o conjunto de caracteres heurística (que vai demorar um palpite, com base na distribuição de caracteres - e muitas vezes acerta, às vezes erra e você terá uma página em romeno interpretado como texto chinês, que normalmente meios "ilegível")
  • alguns navegadores antigos vai cair para trás em us-ascii

Se com este procedimento, charset do script PHP e partidas charset do navegador, o texto será - acidentalmente - ser legível. Se não, haverá sinais estranhos e fenômenos semelhantes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top