PHP kodlama sorunu (UTF-8)

5 Cevap php

Ben çıktı PHP aşağıdaki dize istiyorum:

ä ö ü ß €

Bu nedenle, ben elle UTF8 kodlanmış ettik:

à ¤ à ¶ à ¼ ß Â €

Yani benim senaryom:

<?php
header('content-type: text/html; charset=utf-8');
echo 'Ã ¤ Ã ¶ Ã ¼ ß Â €';
?>

İlk 4 karakter (ä ö ü ß) doğru ama ne yazık ki € işaret doğru değil:

ä ö ü ß?

Here you can see it.

Eğer ben yanlış yaptığımı bana söyleyebilir? Benim editörü (Notepad + +) Kodlama (ANSI/UTF-8) ve Biçim (Windows / Unix) için ayarları vardır. Onları değiştirmek zorunda mıyım?

Bana yardımcı olur umarım. Şimdiden teşekkürler!

5 Cevap

Bu son karakteri sadece bunu görmüyorum neden olan, (kaynağını inceleyen deneyin) dosyasında değil.

, Ve (Notepad + + yani) PHP dosyasında gerçek karakterleri ekleme - I (BOM olmadan UTF-8 Encode> seçenekler Format mevcuttur Notepad + + olmasıyla) UTF-8 olarak PHP dosyasını kaydederek daha iyi olabileceğini düşünüyorum yerine her yerde à takmadan etrafında hack daha. Sen unicode karakterleri ekleyerek Windows Character Map yararlı olabilir.

header('Content-Type: text/html; charset=UTF-8');

Bu sadece bunu göndermek için gidiyoruz ve nasıl tedavi edilmelidir konum içeriğinin ne tür tarayıcılar bilgilendirir. Bu yolluyoruz gerçek içeriğinin kodlamasını belirlemek değildir. Bu, kendi sözünü yerine getirmek için tamamen size kalmış. Içerik bu başlığı ayarlamak sırf sihirli ne olursa olsun UTF-8 dönüştürmek için gitmiyor. UTF-8 olarak içeriği tedavi tarayıcısına anlatan, ama bunu Latin-1 kodlanmış veri gönderme ediyorsanız, tabii ki kıracak.

I What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text sevk

Euro işareti (U +20 AC) üç bayt değil, iki ile UTF-8 olarak kodlanmış. Bu görülebilir here. Yani kodlama yanlıştır.

Sen always oluşturulan HTML kullanmak için tarayıcı talimatını aynı kodlama için düzenleyici ayarlamak gerekir. HTML sayfası UTF-8 olarak yorumlanabilir amaçlanan ise, UTF-8 metin editörü ayarlayın. PHP dosyası oluşturmak için kullanılan editörü kodlama ayarları tamamen habersiz olduğu; Bu bayt akışı olarak dizeleri davranır.

Diğer bir deyişle, sürece doğru bayt dosyada olduğu gibi, her şey çalışacaktır. Ve sağ bayt dosyasında sağlamak için en kolay yolu, web sayfası başka bir şey Lütfen sadece olması gerekenden daha hayat daha zor hale getirir olması gerekiyordu aynı birine kodlama ayarlamaktır.

Ama en iyi savunma tamamen kodu dışında ASCII olmayan karakterleri bırakmaktır. Bir veritabanı veya yerelleştirme dosyası onları çekin yerine yapabilirsiniz. Bu kod kodlama zarar endişesi olmadan, esasen herhangi bir editörü değiştirilebilir anlamına gelir.

Eğer çıkış istiyorsan düzgün utf8, komut dosyası olmalıdır:

<?php
header('content-type: text/html; charset=utf-8');
echo "\xc3\xa4"."\xc3\xb6"."\xc3\xbc"."\xc3\x9f"."\xe2\x82\xac";
?>

Php komut olmayan bir utf-8 kodlama kaydedilir bu şekilde olsa bile, yine de çalışacaktır.