Pergunta

Ao usar a função include do php, o include é executado com sucesso, mas também está gerando um char antes da saída do include ser exibida, o char tem valor hexadecimal 3F e não tenho ideia de onde ele vem, embora pareça acontecer com cada inclusão.

No começo pensei que fosse codificação de arquivo, mas isso não parece ser um problema.Eu criei um caso de teste para demonstrar isso:(link não funciona mais) http://driveefficiently.com/testinclude.php este arquivo consiste apenas em:

<? include("include.inc"); ?>

e include.inc consiste apenas em:

<? echo ("hello, world"); ?> 

e ainda assim, a saída é: "?Olá Mundo" onde o ?é um caractere com um valor aleatório.É esse valor que não conheço a origem e que às vezes está atrapalhando um pouco os meus sites.

Alguma ideia de onde isso pode estar vindo?No começo pensei que poderia ter algo a ver com a codificação de arquivos, mas não acho que seja um problema.

Foi útil?

Solução

O que você está vendo é uma marca de ordem de bytes UTF-8:

A representação UTF-8 da BOM é a sequência de bytes EF BB BF, que aparece como os caracteres ISO-8859-1  na maioria dos editores de texto e navegadores da web não preparados para lidar com UTF-8.

Marca de ordem de bytes na Wikipedia

O PHP não entende que esses caracteres devem ficar "ocultos" e os envia para o navegador como se fossem caracteres normais.Para se livrar deles, você precisará abrir o arquivo usando um editor de texto "adequado" que permitirá salvar o arquivo como UTF-8 sem a lista técnica inicial.

Você pode ler mais sobre esse problema aqui

Outras dicas

Seu servidor web (ou seu editor de texto) aparentemente inclui um BOM no documento.Não vejo o caractere nocivo em meu navegador, exceto quando defino explicitamente a codificação do site como Latin-1.Então, vejo duas (!) BOMs UTF-8.

/EDITAR:Do fato de existirem dois BOMs Concluo que o BOM é realmente incluído pelo seu editor no início do arquivo.Qual editor você usa?Se você usa Visual Studio, você deve dizer “Salvar como …” no menu Arquivo e depois escolher o botão “Salvar com codificação…”.Lá, escolha “UTF-8 sem BOM” ou algo semelhante.

Ele não aparece na página renderizada no Firefox ou IE, mas você pode ver o personagem engraçado ao visualizar o código-fonte no IE

enter image description here

Isso está em uma máquina Linux?Você poderia localizar e substituir por vim ou sed para ver se consegue se livrar do 3F dessa maneira?

Se estiver no Windows, tente abrir include.inc com o Bloco de notas para ver se o caractere engraçado está visível e pode ser excluído.

Também estou curioso para ver o que acontece se você copiar o código do include e executá-lo sozinho.

Personagem 3F, na verdade é o ponto de interrogação, ele não é exibido apenas como um.

Obtenho os mesmos resultados que Thomas, sem nenhum ponto de interrogação aparecendo.

Em teoria, poderia haver algum problema com um proxy da web, mas estou inclinado a suspeitar de um ponto de interrogação perdido em sua marcação PHP... que talvez você já tenha corrigido, então não vemos o problema.

Eu vejo hello, world na página que você vinculou.Nenhum problema que eu possa ver...

Estou usando o Firefox 3.0.1 e o Windows XP.Qual navegador/sistema operacional você está executando?Talvez esse seja o problema.

Eu também ficaria curioso para ver o que acontece se você copiar o código da inclusão e apenas executá -lo por si só.

Marca:isso está em uma solução de hospedagem compartilhada, então não consigo obter acesso shell ao arquivo.No entanto, como você pode ver aqui, não há caracteres que não deveriam estar lá e executar o mesmo arquivo como um script não produz esse caractere.(A empresa de hospedagem compartilhada não tem ajudado, continuamente me dizendo que é um problema do navegador).

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