Longueur d'une chaine, en byte...

Résolu
pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 - 20 juil. 2008 à 12:49
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 - 20 juil. 2008 à 20:14
bonjour les gens!!

bon je me bats avec une petite fonction qui me génère un fichier  CSV (valeurs séparées par virgule...) jusque là tout va bien
le tout marche très bien, mais je dois forcer le téléchargement du fichier... et là un petit problème qui se pose dans la spécification HTTP/1.1, c'est qu'il faut que j'indique la longueur en byte du fichier, qui n'en est pas encore une.... et là mon problème:

comment trouver la longueur de cette chaine, sans devoir écrire le fichier sur le disque (ce que je veux éviter...) pour faire une sortie directe, en forçant le téléchargement...

le problème c'est que je n'ai pas que forcément des caractères ASCII dans les fichiers.... et que donc j'ai une jeu de caractère multibyte....

qu'en pensez vous?

Merci pour toutes piste qui pourrait me débloquer....

Sur ce bon midi

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />

2 réponses

pysco68 Messages postés 681 Date d'inscription samedi 26 février 2005 Statut Membre Dernière intervention 21 août 2014 8
20 juil. 2008 à 13:50
J'ai fini par trouver....

solution: convertir la chaine en UTF-8, et utiliser mb_strlen() pour compte la longueur en le forçant sur "latin1" comme jeu de caractère....

bref, pour ceux à qui ça pourrait servir:
<hr size="2" width="100%" />$out_utf8 = utf8_encode($out); // Transforme en UTF-8
header("Content-disposition: attachment; filename=nom_du_fichier.txt");
header("Content-Type: application/force-download");
header("Content-Transfer-Encoding: text/plain\n"); // Surtout ne pas enlever le \n
header("Content-Length: ".mb_strlen($out_utf8, 'latin1'));
header("Pragma: no-cache");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public");
header("Expires: 0");
echo $out_utf8;

<hr size="2" width="100%" />ça à l'air de marcher en tout cas ;)

allé!! bonne journée!

<hr size="2" width="100%" />Developpement Web Yannic GraphiX | Mon CMS yArt et sa démo
<hr size="2" width="10" />
3
Evangun Messages postés 1980 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 24 septembre 2012 4
20 juil. 2008 à 20:14
Hello !

Ben tu m'as mis le doute, mais non, strlen( ) fait simplement l'affaire, pas besoin de ces conversions il me semble !

mon fichier php étant en utf8, echo strlen('é@üñ'); me donne bien 7.

à+
0
Rejoignez-nous