annotate atom.php @ 35:e776701841ba

Gestion plus flexible des content-type Cela permet notamment de gérer correctement le cas de Atom. Ca ne devrait toutefois probablement pas rester comme ça longtemps, il est plus que probable que le content-type passe lui aussi en paramètre de configuration dans les templates.
author Franck Deroche <webmaster@defr.org>
date Mon, 05 Nov 2007 09:56:44 +0100
parents 629389204276
children
rev   line source
webmaster@0 1 <?php
webmaster@0 2
webmaster@0 3 include("classes.php");
webmaster@0 4
webmaster@0 5 function utf8_ensure($str) {
webmaster@0 6 return seems_utf8($str)?$str:utf8_encode($str);
webmaster@0 7 }
webmaster@0 8
webmaster@0 9 function seems_utf8($Str) {
webmaster@0 10 for ($i=0; $i<strlen($Str) && $i<150; $i++) {
webmaster@0 11 if (ord($Str[$i]) < 0x80) continue; # 0bbbbbbb
webmaster@0 12 elseif ((ord($Str[$i]) & 0xE0) == 0xC0) $n=1; # 110bbbbb
webmaster@0 13 elseif ((ord($Str[$i]) & 0xF0) == 0xE0) $n=2; # 1110bbbb
webmaster@0 14 elseif ((ord($Str[$i]) & 0xF8) == 0xF0) $n=3; # 11110bbb
webmaster@0 15 elseif ((ord($Str[$i]) & 0xFC) == 0xF8) $n=4; # 111110bb
webmaster@0 16 elseif ((ord($Str[$i]) & 0xFE) == 0xFC) $n=5; # 1111110b
webmaster@0 17 else return false; # Does not match any model
webmaster@0 18 for ($j=0; $j<$n; $j++) { # n bytes matching 10bbbbbb follow ?
webmaster@0 19 if ((++$i == strlen($Str)) || ((ord($Str[$i]) & 0xC0) != 0x80))
webmaster@0 20 return false;
webmaster@0 21 }
webmaster@0 22 }
webmaster@0 23 return true;
webmaster@0 24 }
webmaster@0 25
webmaster@0 26 if(stristr($_SERVER['HTTP_ACCEPT'], "application/atom+xml"))
webmaster@0 27 header("Content-Type: application/atom+xml; charset=utf-8");
webmaster@0 28 else
webmaster@0 29 header("Content-Type: application/xml; charset=utf-8");
webmaster@0 30 echo("<?xml version='1.0' encoding='utf-8'?>\n");
webmaster@0 31 $Data = new DataAccess();
webmaster@0 32 $Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 1");
webmaster@0 33 $val=$Data->GetRow();
webmaster@0 34 $modifiedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost']));
webmaster@0 35 ?>
webmaster@0 36 <feed xmlns="http://www.w3.org/2005/Atom" xml:lang='fr-FR'>
webmaster@0 37 <title>Dual Blog</title>
webmaster@0 38 <subtitle>Le blog de DeFr, parlant de tout et de rien ^^;</subtitle>
webmaster@0 39 <link rel='alternate' type='text/html' href='http://defr.org/blog/' />
webmaster@0 40 <link rel='self' type='application/atom+xml' href='http://defr.org/blog/dualblog.atom' />
webmaster@0 41 <updated><?php echo $modifiedDate; ?></updated>
webmaster@0 42 <author>
webmaster@0 43 <name>Deroche Franck</name>
webmaster@0 44 <uri>http://defr.org</uri>
webmaster@0 45 </author>
webmaster@0 46 <id>urn:uuid:cface534-634f-4ce8-a07b-3a4187982583</id>
webmaster@0 47 <?php
webmaster@0 48
webmaster@0 49 $result=$Data->Query("SELECT * FROM Mess ORDER BY num_mess DESC LIMIT 0, 20");
webmaster@0 50 while($val=$Data->GetRow()) {
webmaster@0 51 $utf8_Mess=str_replace("</P>", "</p>", str_replace("<P>", "<p>", (str_replace("&euro;", "&#x20AC;", utf8_ensure($val['Message'])))));
webmaster@0 52 $utf8_Mess = str_replace("&nbsp;", " ", $utf8_Mess);
webmaster@0 53 $utf8_Titre=utf8_ensure($val['Titre']);
webmaster@0 54 $issuedDate=gmdate("Y-m-d", strtotime($val['DatePost'])) . "T" . gmdate("H:i:s-02:00", strtotime($val['DatePost']));
webmaster@0 55 echo("
webmaster@0 56 <entry>
webmaster@0 57 <title type='xhtml'>
webmaster@0 58 <div xmlns='http://www.w3.org/1999/xhtml'>
webmaster@0 59 {$utf8_Titre}
webmaster@0 60 </div>
webmaster@0 61 </title>
webmaster@0 62 <id>tag:defr.org,2006:{$val['num_mess']}</id>
webmaster@0 63 <content type='xhtml'>
webmaster@0 64 <div xmlns='http://www.w3.org/1999/xhtml'>
webmaster@0 65 {$utf8_Mess}
webmaster@0 66 </div>
webmaster@0 67 </content>
webmaster@0 68 <published>{$issuedDate}</published>
webmaster@0 69 <updated>{$issuedDate}</updated>
webmaster@0 70 <link rel='alternate' type='text/html' href='http://www.defr.org/blog/posts/{$val['id']}' />
webmaster@0 71 </entry>
webmaster@0 72 ");
webmaster@0 73 }
webmaster@0 74 ?>
webmaster@0 75 </feed>