2010-06-25 7 views
3

J'écris une fonction pour générer dynamiquement mon sitemap et mon index de sitemaps. Selon les docs sur sitemap.org, le fichier devrait être encodé en UTF-8.Ecriture d'un fichier avec encodage UTF8 en PHP

Ma fonction pour écrire le fichier est un peu simpliste, quelque chose le long des lignes de:

function generateFile() 
{ 
    $xml = create_xml(); 
    $fp = @fopen('sitemap', 'w'); 
    fwrite($fp, $xml); 
    fclose($fp); 
} 

[Modifier - ajouté après commentaires]

Le create_xml() est simpliste, comme si:

function create_xml() 
{ 
return '<?xml version='1.0' encoding='UTF-8'?> 
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 
       http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd"> 
    <url> 
     <loc>http://example.com/</loc> 
     <lastmod>2006-11-18</lastmod> 
     <changefreq>daily</changefreq> 
     <priority>0.8</priority> 
    </url> 
</urlset>'; 
} 

y at-il quelque chose en particulier que je dois faire pour faire en sorte que le fichier est encodé en UTF-8?

En outre, je voudrais gzip le fichier, plutôt que de le laisser non compressé. Je sais comment compresser le fichier après l'avoir enregistré sur le disque. Je veux savoir si (comment?), Puis-je compresser le fichier AVANT d'écrire sur le disque?

+0

Quel encodage utilisez-vous actuellement? Si vous n'êtes pas sûr, il est obligatoire de lire pour vous: http://www.joelonsoftware.com/articles/Unicode.html – Kornel

+0

Gzip est une question sans rapport. Pourriez-vous le déplacer vers un autre poste? – Kornel

Répondre

0

Oui, vous devez vous assurer que votre contenu (la sortie de create_xml() est codée en UTF-8. Pour ce faire, vous pouvez utiliser utf8_encode(). Vous devez vous assurer que le fichier XML spécifie <?xml version="1.0" encoding="UTF-8"?>. Et je vous suggère à fopen en mode 'wb', le b signifiant binaire. Cela permettra d'assurer que les données s'écrit exactement tel quel.

+1

Gardez à l'esprit que 'utf8_encode()' ne fait pas magiquement les chaînes UTF-8. Il convertit le codage de ISO-8859-1 en UTF-8. S'il est utilisé avec d'autres encodages, il peut donner quelque chose qui ressemble à UTF-8, mais qui n'est pas valide. – Kornel

0

Vos fichiers de script PHP doivent être enregistrés au format UTF-8.

aussi, il est difficile de dire plus sans voir ce que create_xml() fait

0

Si vous utilisez uniquement des caractères ASCII, votre fichier sera toujours en UTF-8.