PHP: tarayıcıya veri göndermek için kullanılan mevcut kodlama

6 Cevap php

Nasıl tarayıcıya veri gönderirken hangi kodlama PHP tarafından kullanılan olacak bilebilir? Yani Cotent-Type başlığı ile, örneğin: iso-8859-1.

6 Cevap

Usually Apache + PHP servers of webhosters are configured to send out NO charset header. The shortest way to test how your server is configured are these:

  • Use this tool to see the server header by getting any one of your pages on your webiste. If in the server headers you see a charset it means your server is using it, usually it won't contain a charset.
  • Başka bir yolu da sunucu üzerinde bu basit komut dosyasını çalıştırmak için: size charset PHP gösterecektir farklı ise <?php echo ini_get('default_charset'); ?> bu yukarıda söylediğim gibi, genellikle, boş bir dize yazdırır.

2. Çözelti Apache supposing AddDefaultCharset some_charset ki genellikle böyle değil yapılandırılmış, ancak bu durumda ben Apache ayar PHP deafult_charset yönergede geçersiz korkuyorum değildir.

Eğer Apache çalıştıran ve Apache yapılandırma (Internet Explorer deli gidecek) everytime kazanacak ki, bir öntanımlı karakter kümesini kullanıyorsa, ancak bak, William önerdi header () çözümü kullanabilirsiniz: AddDefaultCharset

Içerik türleri ve kodlamaları iki farklı şeyler olduğunu unutmayın. text / html içerik türü olduğunu; ISO-8859-1 ve UTF-8 kodlamaları vardır.

Sunucu tipik gönderir HTTP yanıt başlığı şöyle:

Content-Type: text/html; charset=utf-8

"Charset" aslında karakter kodlama. Bu ayrı bir başlık olarak değil; ancak aslında sıkıştırma ne tür tepki kullandığı (örn. gzip) belirtir "Content-Encoding" adlı bir başlık var.

HTML içeren bir dosyayı, UTF-8 karakter kodlamasını değiştirmek istiyorsanız:

<?
header("Content-Type: text/html; charset=utf-8");

Sen header('Content-type: xxx/yyy'); ile kendi ayarlayabilirsiniz, ama ben text / html varsayılan olarak gönderilen inanıyorum.

AFAIK, PHP dizeleri bytewise gönderir. Lütfen değişkenleri UTF-8 tutarsan yani, UTF-8 göndereceğiz. iso-8859-1 varsa, o da o gönderir. Bunları karıştırın eğer, oldukça olmayacaktır.

Sunucu varsayılan bir içerik veya charset yapılandırılmış, ve PHP ne ise, PHP sadece göndereceğiz Content-Type: text/html - tüm bir charset belirtmek olmaz ve bunları gördükçe bayt göndereceğiz Senaryoda.

Bir tarayıcı belirtilen charset olmadan bir sayfa alırsa, çeşitli şeyler olabilir:

  • çoğu tarayıcı bir "Kodlama / Karakter" menü var; kullanıcı açıkça birini seçerse, tarayıcı bunu uygulamak için çalışacağız. Bu yüzden, çok sık olmaz:
  • bazı tarayıcılar varsayılan bir charset ile işlemek deneyin (FF ve cs_CZ o iso-8859-2 olması için kullanılır örn yerele bağımlı olduğunu; YMMV)
  • IE (bu karakter dağılımına dayalı bir tahmin alacak sezgisel olarak charset belirlemek için çalışacağız - bu doğru olur ve birçok kez, bazen yanlış olur ve Romence bir sayfa olsun, genellikle "okunamaz anlamına gelir Çince metin olarak yorumlanır ")
  • Bazı eski tarayıcılar us-ascii geri düşecek

Bu prosedür, PHP betiğin charset ve tarayıcınızın charset maçları ile ise, metin olacak - yanlışlıkla - okunabilir. Değilse, garip işaretler ve benzeri olaylar olacaktır.