utf-8 ve RSS beslemeleri de htmlentities

6 Cevap php

Bazı RSS PHP beslemeleri yazma ve karakter kodlama sorunları ile stuggling ediyorum. I Htmlentities () kodlama önce veya sonra () utf8_encode gerekir? Örneğin, ben bir açıklama öğesi ve işaretleri ve Çince karakterler hem de var, ve ben doğru bunlardan hangisi emin değilim:

$output = utf8_encode(htmlentities($source)); or
$output = htmlentities(utf8_encode($source));

Ve neden?

6 Cevap

Varsayılan ISO-8859-1 olduğu gibi, htmlentities işlevine ayarlanmış karakter geçmek önemlidir:

utf8_encode(htmlentities($source,ENT_COMPAT,'utf-8'));

Utf8_encode düzgün varlıkları kodlamak için izin olarak ilk htmlentitiesi başvurmalıdır.

(EDIT:. Ben sipariş olsun yorumlarına dayalı olmadığı Bu kod test edilmeden önce benim görüşüme değişti ve iyi çalışıyor).

Birincisi: utf8_encode function ISO 8859-1 den UTF-8 dönüştürür. Lütfen giriş kodlama / charset ISO 8859-1 ise Yani sadece, bu işlev gerekir. Ama neden ilk etapta UTF-8 kullanmak değil mi?

İkincisi: Sen htmlentities . You just need htmlspecialchars to replace the special characters by character references. htmlentities, doğrudan UTF-8 ile kodlanmış olabilir "çok fazla" karakterleri yerini alacak gerekmez. Önemli de tek tırnak yerine ENT_QUOTES alıntı stili kullanabilirsiniz olmasıdır.

Yani benim öneri:

// if your input encoding is ISO 8859-1
htmlspecialchars(utf8_encode($string), ENT_QUOTES)

// if your input encoding is UTF-8
htmlspecialchars($string, ENT_QUOTES, 'UTF-8')

Kullanmayınız htmlentities()!

Sadece UTF-8 karakter kullanın. Sadece HTTP başlıklarını yem kodlama beyan (Content-Type:application/xml;charset=UTF-8) veya başarısız emin olun ki ilk satırında <?xml version="1.0" encoding="UTF-8"?> kullanarak yem kendisi.

Yapmak istediğiniz $output = htmlentities(utf8_encode($source));. Eğer uluslararası karakterler ilk uygun UTF8 dönüştürmek ve daha sonra işaretleri (ve muhtemelen de UTF-8 karakter bazı) sahip HTML kuruluşlara döndü istiyorum çünkü bu. Ilk varlıkları yaparsanız, o zaman uluslararası bazı karakterler düzgün ele olabilir.

Uluslararası karakterlerin hiçbiri utf8_encode tarafından değiştirilebilir olacak ise, o zaman onları içeri çağırır hangi sipariş farketmez

Bu htmlentitiesi unutmak ve bir CDATA bölümü kullanmak daha kolay olabilir. Bu Firefox'un RSS görüntüleyici destek kodlanmış HTML karakterleri görünmüyor başlık bölüm için çalışıyor:

<title><![CDATA[News & Updates  " > » ☂ ☺ ☹ ☃  Test!]]></title>

Çok deneme ve Sonrası hata, sonunda düzgün bir html sayfasına, bir xml dosyası üzerinden, bir utf8 kodlanmış veritabanı değeri bir dize görüntülemek için bir yol buldu:

$output = '<![CDATA['.utf8_encode(htmlentities($string)).']]>';

Ben bu kimse yardımcı olur umarım.