Problème d'encodage texte, HELP :D

@ybee

Membre expert
Club iGen
18 Mai 2001
1 039
14
42
Embourg, Belgique
antoine.olbrechts.eu
Hello à tous,


J'ai un script PHP que je viens d'écrire qui va rechercher les données d'une base MySQL et qui me ressort un fichier tabulé (pour une importation par le client dans un fichier Excel).

Mon problème est que les données sont en UTF-8 et que lorsque je fais la manoeuvre, j'ai des problèmes d'accents, bien entendu :rolleyes:
Je ne parviens pas à modifier l'encodage à la sortie pour ne plus avoir ces problèmes, une idée ... ?


Merci pour votre aide!





PS: J'ai également un autre problème, si quelqu'un a une piste: certains champs sont au format "TEXT" MySQL et sont issus de <textarea>s . Il y a donc des retours à la ligne possibles, ce qui pose problème à l'exportation puisque le fichier tabulé est alors incorrect (retours à la ligne qui "coupent" des enregistrements en deux)...

J'ai tenté ceci mais ça ne fonctionne pas (pour remplacer les retours à la ligne par un espace):

Bloc de code:
$specialties1 = str_replace("\n\r"," ",$data['specialties1']);
$tab .= stripslashes($specialties1) . "\t";

Une idée aussi ;-) ?
 
[hors-sujet :rose:]

Si t'as accès à la base, tu as essayé de regarder du coté de mysqldump ?

[\hors-sujet :rose]



Mmmmmh de fait mysqldump pourrait même replacer ce que j'avais écrit pour sortir du texte tabulé...
Mais je comprends pas trop la syntaxe, tu la connais un peu?

En fait j'ai deux scripts:

1. Celui qui exporte en un fichier tabulé le contenu de 3 tables différentes, toutes liées par un id unique (ID de l'exposant dont on veut télécharger la fiche)

2. Celui qui (plus compliqué, je l'ai pas encore fini) exporte l'entièreté des 3 tables, en veillant à bien lier les 3 selon l'id de chaque exposant, pour avoir une lign par exposant?



Et évidemment, c'est à faire avant demain matin :rolleyes:
 
Bon bonn petite mise &#224; jour:

Les retours &#224; la ligne c'est r&#233;gl&#233;
L'encodage texte pas :(

Et j'ai un autre probl&#232;me:

J'ai besoin d'avoir en une seul requ&#234;te le contenu de 3 tables. Les 3 sont li&#233;es via un ID unique...

Bloc de code:
$req = mysql_query("SELECT	*
FROM	tb_exhibitors, tb_antica, tb_opening_hours
WHERE tb_antica.exhib_id = tb_exhibitors.id && tb_opening_hours.exhib_id = tb_exhibitors.id
ORDER BY		LOWER(commercial_name) ASC"); // on selectionne les enregistrements
$res = mysql_numrows($req);

Le probl&#232;me c'est qu'en faisant comme &#231;a, il ne prend QUE les enregistrements de tb_exhibitors qui ont une entr&#233;e &#224; la fois dans tb_antica et dans tb_opening_hours.

R&#233;sultat, il me ressort uniquement 102 entr&#233;es sur les 143 (102 exposants qui ont une entr&#233;e dans chacune des 3 tables si vous voulez...)

Ceci me pose probl&#232;me, car j'aimerais de toutes fa&#231;ons afficher les 143 exposants, et si ils n'ont pas d'entr&#233;e dans tb_antica et tb_opening_hours, ils soient quand m&#234;me repris...

Je sais pas si je suis clair, mais si quelqu'un sait me d&#233;panner c'est g&#233;nial :D


MERCHIIIIII :D !!
 
hum hum... ça sent le LEFT OUTER JOIN :D

voir quelques détails

Ca c'est réglé, nickeeeeeeeeeeeeeeeeeeel !!

Par contre il reste cette histoire d'encodage texte qui me pose un gros problème, et qui potentiellement m'écarte de l'heure à laquelle je vais pouvoir aller dormir :D
 
Question a propos de l'histoire d' "encodage"

La sortie en question se fait ou ? dans un fichier texte, dans les champs d'une autre table, dans un document html... plus precisement, ouu constate tu ce probleme (navigateur, editeur texte, logiciel de gestion msql...)

CAR, si cela se passe dans un navigateur web, et que tu affiche tt cela dans une page HTML, il se peut qe tu ai un probleme soit
1 - de header, avant d'envoyer du texte au navigateur, precise :
Bloc de code:
header("Content-Type: text/html; charset=utf-8");
2 - de meta, met donc ce meta dans ta page html
Bloc de code:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
ce qui forcera le navigateur a afficher en utf-8

dans les 2 cas, pas besoin de "decoder" le texte
ce n'est qu'une piste, mais essaye donc :)
 
C'est ce quoi j'avais pens&#233; au d&#233;but. Mais en relisant mieux la question, j'ai vu que la sortie devait se faire dans "un fichier tabul&#233; pour une importation par le client dans un fichier Excel". Il ne s'agit donc pas de fournir des indications au navigateur pour interpr&#233;ter les caract&#232;res afin de les afficher correctement. Les donn&#233;es g&#233;n&#233;r&#233;es par le script PHP doivent se trouver dans le bon format d&#232;s le d&#233;part. C'est donc bien un probl&#232;me d'encodage.
 
Eh beh, 'avais pas les yeux en face des trous moi ce matin...desole:zen:

Bon, sinon, un fichier aussi ca possede un encodage, essaye ceci alors

Bloc de code:
header('Content-type: text/plain; charset=utf-8');
header('Content-Disposition: attachment; filename="import.txt"');
sinon, essaye d'exporter directement en fichier excel...
Bloc de code:
header('Content-type: application/vnd.ms-excel; charset=utf-8');
header('Content-Disposition: attachment; filename="import.xls"');
C'est deja le matin chez toi... tu t'en es sorti ?
 
En fait, j'utilise un script que ficelle m'a envoy&#233; et qui met d&#233;j&#224; tout dans un fichier Excel...
Je ne sais pas &#224; quel niveau se situe le probl&#232;me d'encodage, &#231;a m'a rendu fou, j'ai fini par aller dormir et je finira &#231;a today ... du moins il y a int&#233;r&#234;t :D

Si un bonne &#226;me veut m'aider, je peux lui envoyer le script entier, sinon ben je suis en train de continuer mes recherches l&#224; ;)
 
Pas tres jolie, mais ca marche...

Bloc de code:
header('Content-type: application/vnd.ms-excel; charset=utf-8');
header('Content-Disposition: attachment; filename="import.xls"');

$c = mysql_connect("host", "user", "pass");
mysql_select_db("bdname", $c);
$qi= mysql_query("SELECT * FROM tests");

echo "<table>";

while ($val = mysql_fetch_object($qi))
{
    echo ("<tr>".
            "<td>".$val->champ1."</td>".
            "<td>".$val->champ2."</td>".
            "<td>".$val->champ3."</td>".
            // [...]
        "</tr>");
}

echo "</table>";
 
Un grand merci &#224; tous pour votre aide!

Il ne me suffit maintenant que de trouver comment &#233;crire un script pour zipper un dossier sur le serveur comprenant des images pour qu'il soit automatiquement t&#233;l&#233;charg&#233; sur le bureau de l'utilisateur lorsqu'il clique sur un lien...

Je vois le bout du projet, &#231;a fait plaisir :D
 
Il s'est mal exprimer... en fait, tu peux faire qu'une archive a la fois, mais avec autant de fichier que tu veux dedans..., il suffit de repeter la ligne

Bloc de code:
$zip->addfile($content, $filename);

autant de fois que tu as de fichiers ;) ca fonctionne.
 
Ahaaaaaaaaaaaaaa :D

Mais ...

En fait moi je connais pas le contenu du dossier, il change tout le temps ...
Il faut qu'&#224; n'importe quel moment le gestionnaire de la BD puis t&#233;l&#233;charger l'archive zip des photos des exposants. Or des photos sont ajout&#233;es r&#233;guli&#232;rement, donc je ne connais pas le contenu :(
 
Jsuis nul dans ce genre de trucs :D

Je sais pas comment lui dire de scanner le contenu du dossier et mettre une boucle for pour ajouter chaque fichier &#224; l'archive zip :D

Et coupl&#233; &#224; &#231;a en fait il faudrait que je scanne toutes les photos contenues dans le dossier, que je leur applique une fonction de redimensionnement que j'ai &#233;crite, puis faire un gros .zip de toutes les photos redimensionn&#233;es...