rss feed ve cdata ile sorun

5 Cevap php

Ben bir rss feed ile ilgili bir sorun var.

I ne zaman <title>This is a title </title>

Başlık beslemede güzel görünür

But when i ddo $title = "this is a tilte";

<title><![CDATA['$title']]></title>

Başlık hiç görünmüyor.


Hala çalışmıyor. Benim rss feed dynamicly oluşturmak ve bu gibi görünüyor:

$item_template="
      <item>
         <title>[[title]]</title>
         <link>[[link]]</link>
         <description><![CDATA[[[description]]]]></description>
         <pubDate>[[date]]</pubDate>
      </item>
      ";

ve bir döngü içinde:

$s.=str_replace(
array("[[title]]","[[link]]","[[description]]","[[date]]"),
array(htmlentities($row["title"]),$url,$description,$date),
$item_template);

Başlığı euro işareti olduğunda sorun orya. Sonra sanki benim rss doğrulayıcısındaki gösterir:

Â\x80


More detailed information:

Tamam ben son birkaç gündür bu struggelinğin olmuştur ve ben bir çözüm bulamıyorum. Yani bir ödül başlayacaktır. Burada daha fazla bilgi:

  • Yem gider bilgisi (i yönetmek) bir latin 1 veritabanında saklanır
  • Bir euro işaret veritabanında olduğunda sorun görünür. Onun gibi € veya &euro; wether olursa olsun
  • Euro işareti bazen garip charachters gibi veya  \ X80 gibi görünür
  • Ben okuyucu tarafında besleme tarafındaki sorunu çözmek için çalışacağız.
  • Tam kod burada bulunabilir: codedump
  • Sonraki: Euro işaret ayrıştırılamaz bazen kalem (başlık veya açıklama ya) boş gösterilir. Yani bulacaksınız bir tarayıcıda yem gösteren zaman kaynak bakarsanız <title></title>

Ihtiyaç fazla bilgi varsa isteyin.

5 Cevap

Sorun çıkışının kodu; değişim

echo '<title><![CDATA[$title]]></title>';

karşı

echo '<title><![CDATA[' . $title . ']]></title>';

Bir yan not olarak, aşağıdaki zihin lütfen: bir takip ile kendi soru cevap, ama özgün bir düzenleme yapmayın. Sebepsiz İfadelerinin kullanmayın. Sanırım yok.

Bunun yerine, tüm boyunca yapmalıydım ne: htmlentitites başlığı sarın ve olduğu gibi yapılabilir:

echo '<title>' . htmlentities($title, ENT_NOQUOTES, [encoding]) . '</title>';

Replace [encoding] with the character encoding you are using. Most likely, this is 'UTF-8'. This is necessary because php(<6) uses ISO-8859-1 by default and there is no way karşı express e.g. the Euro sign in that encoding. For further information, please refer karşı this well-written introduction.

Ben de size önermek read about XML. İkinci bölümde ile başlayın.

htmlspecialchars() yerine htmlentities() arasında kullanın.

RSS / ATOM beslemeleri are not HTML, böylece onları HTML varlıkları cant kullanmak. XML has only five entities defined by default, yani kullanamazsınız &euro;. UTF kullanıyorsanız bu yana - dönüşüm (no htmlentities) olmadan, değişmez euro işareti kullanın, ancak diğer duyarlı karakterler kaçan ile (htmlspecialchars).

Ve bu tamamen geçerli RSS / XML olacaktır. Bu sorunu çözmezse o (daha fazla yardım için RSS üretilen ham kaynağı bana verin) başka bir yerde yatıyor, demektir.

Hangi programlama dili ya da ortamı kullanıyorsunuz? Örneğin, PHP tek tırnak içindeki değişkenleri değerlendirerek önlemek.

Aksi takdirde, bu durumda gerçekten bu tırnak gerekmez. Eğer PHP dizi sözdizimi karıştı olabilir.

Yani daha yazmak isterim:

<title><![CDATA[$title]]></title>

this belge title, ayrıca tanımlanan karakter verileri tutan devletler as follows: Ben RSS Profil buna izin vermez inanıyorum.

This article, çeşitli bağlamlarda euro işareti ve desteği hakkında bilgi için yararlı olabilir. O makaleden bazı önerileri &#8364; veya &euro; veya sadece kelime ile işaret değiştirilmesi bulunmaktadır "euro." İyi şanslar!