PHP: codificação atual usado para enviar dados para o navegador
-
02-07-2019 - |
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
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á contercharset
. - 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 ocharset
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.