PHP UTF-8 kodlama

6 Cevap php

Ben kodlama ile iyi değilim ama ben bile burada temelleri üzerine düşüyorum.

Ben olarak tanınan bir dosya oluşturmak için çalışıyorum UTF-8

header("Content-Type: text/plain; charset=utf-8");
header("Content-disposition: attachment; filename=test.txt");
echo "test";
exit();

Ayrıca çalıştı

header("Content-Type: text/plain; charset=utf-8");
header("Content-disposition: attachment; filename=test.txt");
echo utf8_encode("test");
exit();

Daha sonra Notepad + + ile dosyayı açın ve bugünkü kodlama Ben bu dosya çıktısı nasıl olması gerektiğini ne eksik, UTF-8 ANSI olmadığını söylüyor.

I will eventually be outputting an XML file of products for the Affiliate Window program. Also if it helps My webserver is Centos, Apache2, PHP 5.2.8.

Herhangi bir yardım için şimdiden teşekkür ederiz!

6 Cevap

Filip dediği gibi, kodlama bir dosyanın içsel bir nitelik değildir; Bu örtülü bulunuyor. Bu ne bir dosyayı şifreleyen yorumlanmalıdır olduğunu bilmedikçe, bunu belirlemek için bir yol var demektir. Yapabileceğiniz en iyi, bir tahmin yapmaktır. Bu Defteri gibi programlar + + ne tahminen olduğunu. Gönderdiğiniz gerçek veriler, birçok farklı kodlamalar yorumlanabilir bu yana, sadece en sevdiği aday seçer. Notepad + + için bu diğer programlar başka bir şey varsayılan olabilir iken, (ki kendisi oldukça yanlış sınıflandırma) ANSI gibi görünüyor.

Eğer bir HTTP başlığında charset belirtmek zorunda nedeni dosyanın kendisi bu bilgileri içermediği tam çünkü, bu yüzden tarayıcı bu konuda bilgilendirilmesi gerekmektedir. Eğer diske dosyayı kaydettikten sonra, bu bilgiler dolayısıyla kullanılamaz.

Size hizmet için gidiyoruz dosya bir XML belge ise, gerçek belge içinde kodlama bilgi koyma seçeneği var. Dosya diske kaydedilir sonra korunur bu şekilde. Örn. Eğer utf-8 kullanıyorsanız, belgenizin üstünde bu koymak gerekir:

<?xml version="1.0" encoding="utf-8" ?>

O ayrı genelinde charset hakkında meta-bilgi almak notu, ayrıca hizmet veren veri aslında utf-8 kodlanmış olduğundan emin olmak gerekir. Bu kadar aynı senaryo: Eğer veri işlevi bulunduğunuz kodlayan dolaylı bilmek gerekir utf8_encode açıkça utf-8 içine iso-8859-1 dönüştürmek içindir (adı rağmen) olduğunu. Zaten utf-8 kodlanmış verileri bunu kullanmak eğer Böylece, bozuk verilerin sonucu ile, çift-kodlanmış alırsınız.

Charsets kendi içinde karmaşık değildir. Sorun olduğunu size karışıklık düz bir şeyler olacak tutmak konusunda dikkatli değilseniz. Eğer bir dize var zaman, sen onu bir dize değil Aksi halde şifreleyen biliyor kesinlikle emin olmalıdır - bu sadece ikili veri bir blob bulunuyor.

test tüm ASCII olduğunu. Yani bunun için UTF-8 kullanmaya gerek yoktur.

Ama aslında, Unicode charset ilk 128 karakter ASCII'ye charset aynıdır. Ve UTF-8 ASCII yaptığı gibi bu karakterler için aynı kodu kullanıyor. Wikipedia’s description of UTF-8 furhter bilgi için bkz.

Dosyayı indirdikten sonra artık kodlama hakkında bilgi taşır, bu yüzden Notepad + + içeriğinden onu tahmin etmek vardır. Içeriğinde öneki ile UTF kodlamalarını belirterek sağlar Byte-Order Mark denen bir şey var.

Sorusuna bakın "When a BOM is used, is it only in 16-bit Unicode text?".

Ben gerçek içeriği doğru dosyayı tanımak için Not Defteri'ni + + zorlar yazmadan önce echo "\xEF\xBB\xBF" gibi bir şey kullanarak hayal ediyorum.

Indirilen txt dosyaları için başlık olarak böyle bir şey yoktur. Eğer zaten sonunda XML dosyaları oluşturmak için deneyin ve XML bildiriminde charset belirtebilirsiniz sonra olarak uzun OS utf-8 destek olduğu gibi, çalışması gerektiğini, bu, basit bir XML yapısını oluşturmayı deneyin ve kaydetmek / açık , hangi herhangi bir modern Linux dağıtımı olmalıdır.