PHP fonksiyon çıkış bilinmeyen karakter dahil

9 Cevap php

Php kullanırken görünüyor olsa da, başarıyla yürütüldüğünde, ama aynı zamanda bir çıkıştan önce bir karakter çıktısı dahil karakter onaltılık değer 3F olduğunu çıkılır ve ben geliyor hiçbir fikrim yok dahil fonksiyon içerir Her ile ne içerir.

İlk başta ben o dosya kodlama oldu thbought, ama bu bir sorun görünmüyor. Bunu göstermek için bir test case oluşturduk: (link no longer working) http://driveefficiently.com/testinclude.php Bu dosya sadece oluşur:

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

ve include.inc sadece oluşur:

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

ve henüz çıkış: "?hello, world" nerede? rastgele bir değere sahip bir karakter. Ben kökenini bilmiyorum, bu değer ve bazen benim siteler biraz bozuyor.

Bu gelen olabilir nerede Herhangi bir fikir? İlk başta ben dosyası kodlama ile ilgili bir şey olabileceğini düşündüm, ama ben onun bir sorun olduğunu sanmıyorum.

9 Cevap

Ne görüyorsanız bir UTF-8 Byte Order Mark:

BOM UTF-8 temsili görünür »ISO-8859-1 karakter ï ¿gibi çoğu metin editörleri ve UTF-8 işlemek için hazır değil, web tarayıcılarında. Byte dizisi EF BB BF olduğunu

Byte Order Mark on Wikipedia

PHP bu karakterler "gizli" ve normal karakterler sanki tarayıcıya bu gönderir gerektiğini anlamıyor. Onlardan kurtulmak için size gelen BOM olmadan UTF-8 olarak dosyayı kaydetmek için izin verecek bir "doğru" bir metin düzenleyicisi kullanarak dosyayı açmak gerekir.

You can read more about this problem here

Sizin web sunucusu (veya metin editörü) görünüşe belgeye bir BOM içerir. Ben Latin-1 açıkça sitenin kodlamasını oluşturmak dışında benim tarayıcıda kötü niyetli karakteri görmüyorum. Sonra, iki (!) UTF-8 BOM'lerı bkz.

/ DÜZENLEME: BOM aslında dosyanın başında senin editör tarafından dahil olduğu sonucuna two BOMs olduğu gerçeğinden. Ne editör kullanıyorsunuz? Visual Studio kullanıyorsanız, Dosya menüsünden "Save As ..." demek lazım ve daha sonra "kodlama ile Kaydet ..." düğmesini seçin ettik. Orada, "BOM olmadan UTF-8" veya benzer bir şey seçin.

Bu Firefox veya IE işlenen sayfada görünmüyor ama IE'de Kaynak Gör zaman komik karakteri görebilirsiniz

enter görüntü açıklaması here

Bu bir Linux makinede mi? Eğer & bulmak yapabilirdi Eğer 3F bu şekilde kurtulabilirsiniz görmek için vim veya sed yerine?

Windows üzerinde ise, komik karakter görünür ve olup olmadığını görmek için Not Defteri ile açılış include.inc deneyin silinebilir.

Ben de dahil dışarı kodu kopyalayın ve sadece kendisi tarafından çalıştırmak ne olur görmek için merak ediyorum.

Karakter 3F aslında is soru işareti, sadece biri olarak görüntülüyor değil.

Ben Thomas, yukarı gösteren hiçbir soru işareti olarak aynı sonuçları almak.

Teorik olarak bir web proxy ile biraz problem olabilir ama ben bu yüzden sorun görmüyorum belki artık sabit PHP biçimlendirme ... bir sokak soru işareti şüphelenmeye eğilimli duyuyorum.

Ben size bağlı sayfadaki hello, world bkz. Ben görebiliyorum sorun yok ...

Ben Firefox 3.0.1 ve Windows XP kullanıyorum. Hangi tarayıcı / işletim sistemi çalıştırıyorsunuz? Belki de bu sorun olabilir.

I see hello, world on the page you linked to. No problems that I can see...

Leigh Caldwell & Thomas Owens, lütfen aşağıdakileri yapın:

Firefox kaynağını görmek ve kopyalamak ve yapıştırmak tüm içeriğini (Ctrl-A it) ve Not Defteri'ne yapıştırın / Bazı editör (veya bir HEX editörü ile daha iyi bir şey) ve bu "rouge" karakter göreceksiniz.

I'd also be curious to see what happens if you copy the code out of the include and just run it by itself.

Mark: Bu bir hosting çözüm üzerinde olduğunu, bu yüzden dosyasına shell erişimi elde edemezsiniz. Ancak, gördüğünüz gibi here, orada olmamalıdır hiçbir karakter vardır, ve bir senaryo olarak aynı dosyayı çalışan bu karakter üretmez. (Hosting şirketi sürekli bir tarayıcı konudur bana, 0 yardım olmuştur).

@Konrad

Out of curiosity, how do you see the BOM? Is it in this somewhere? Ben sadece sayfada kodlama ayarlama hakkında katkınızı gördüm, boşver.

GET /testinclude.php HTTP/1.1
Host: driveefficiently.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1)     Gecko/2008070208 Firefox/3.0.1 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://stackoverflow.com/questions/41647/php-include-function-outputting-unknown-char

HTTP/1.1 200 OK
Date: Wed, 03 Sep 2008 13:45:51 GMT
Server: Apache
X-Powered-By: PHP/5.2.6
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

13 
......hello, world 
0

@DAC Senin. Inc dosyası has BOM, bir onaltılık editörü kullanarak açın ve bunu görebilirsiniz.