IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème accent lecture fichier texte


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut Problème accent lecture fichier texte
    Bonjour, j'ai beau chercher, chercher et chercher, je n'arrive pas à résoudre mon problème.
    Si j'ai bien compris
    "Si la page affiche des caractères de ce type : "�"
    => Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l'UTF-8." expliqué ici.

    Voici mon code php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    <?php
                            $directory = 'prive/upload/files/articles';
     
                            $allowed_types=array('txt');
                            $file_parts=array();
                            $ext='';
                            $title='';
                            $i=0;
     
                            $dir_handle = @opendir($directory) or die("Erreur de repertoire");
     
                            while ($file = readdir($dir_handle)) 
                            {
                                if($file=='.' || $file == '..') continue;
     
                                $file_parts = explode('.',$file);
                                $ext = strtolower(array_pop($file_parts));
     
                                $title = implode('.',$file_parts);
                                $title = htmlspecialchars($title);
     
                                $nomargin='';
     
                                if(in_array($ext,$allowed_types))
                                {
     
                                	$content = file_get_contents(''.$directory.'/'.$file.'');
    								encoding="iso-8859-1"
                                    echo '
                                    <div class="nouvel_article">'
                                    .$content.
                                    '</div>';
     
     
                                }
                            }
     
                            closedir($dir_handle);
     
    ?>
    En gros j'upload via une petite interface des fichiers textes dans un dossier pour publier des articles sur ma page. le fichier est dans mon cas un .txt dont voici le contenu très basic :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    <div class="titre">
     
    Ton titre ici
     
    </div>
    <div class="date">
     
    Ajouté le : jj/mm/aaaa
     
    </div>
     
    <div class="texte">
     
    Ton article ici :
     
    </div>
    Malheureusement l'affichage des accent ne ce fait pas correctement.
    Ma page est encrypté comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    Je suis ouvert à toutes proposiont même à un changement total de méthode pourvu qu'il soit possible à admin novice de poster un article (possibilité de faire un formulaire de post ? ==> j'ai déjà une zone privé)

    Je précise que je suis totalement novice en php et que je fait ce que je peux...dc soyez indulgents et expliquez moi simplement plutot que de m'envoyer vers une page comme ça dont je ne comprend rien

    Merci !

  2. #2
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Le plus simple, c'est de tout mettre en UTF-8. (Surtout que ton encoding="iso-8859-1" semble voler dans les airs)

    1. Prends Notepad ++ ici http://notepad-plus-plus.org
    2. Ouvres tes fichiers textes
    3. Utilise le menu "Encoding - Convert to UTF-8 without BOM
    4. Si ton fichier php a aussi des accents, alors fait de même

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Bonjour, merci pour ta réponse mais je ne suis pas sur d'avoir bien compris.
    Je dois encoder quoi ? Seulement mon php ou aussi tous mes fichiers texte ?
    Merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Après de nombreux essaies...c'est seulement l'encodage sur les fichiers textes qui fonctionnes. Ce qui ne m'arrange pas sachant que "le client" devra faire la manipulation à chaque fois...

    Je vais voir pour une autre solution à savoir encoder un fichier texte appeler articles.txt et écrire dedans via un formulaire en espérant que cela fonctionne.
    J'aurais besoin pour le d'un petit tuyau.

    Connaissez un moyen simple de procéder ? avec ajout d'article et suppression le tout via php ou autre dans un seul fichier txt ?

    Merci

  5. #5
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Pour faire un formulaire d'édition, tu pourrais utiliser CKEditor, ce qui te donnerait un éditeur html. Tu n'aurais qu'à prendre le texte et l'écrire dans un fichier avec file_put_contents.

    Puisque ton document html est en UTF-8, le contenu sera sauvé comme UTF-8.

    Pour effacer les fichiers, c'est unlink().

    CKEditor: http://ckeditor.com/download
    file_put_contents: http://ca2.php.net/manual/fr/functio...t-contents.php
    unlink: http://ca2.php.net/manual/fr/function.unlink.php

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Bonjour bonjour !!
    Alors ce que tu m'as dit m'a beaucoup inspiré...
    J'ai fait un formulaire en php que voilà :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
        	<div id="creation">
     
            <form name="article" method="post" action="do_creation.php"/>
             <div class="titre">Titre de l'article :</div>
     
              <input type="text" name="titre" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
     
              <input type="text" name="date" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Texte de l'article :</div>
     
             <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
             <br>
    		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
            </form>	
            </div>

    do_creation.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    <?php 
    		$titre = $_POST['titre'];
    		$date = $_POST['date'];
    		$texte = $_POST['texte'];
    		$texte = stripslashes((nl2br($texte)));
    		$data = "<div class=\"titre\">$titre</div><div class=\"date\">Ajouté le : $date</div><div class=\"lignetitre\"></div><div class=\"texte\">$texte</div>";
     
    		$fichierChemin = "/prive/upload/files/articles";
    		$fichierNom = $_POST['titre'];
    		$fichierExtension = "txt";
    		$fichierContenu = $data;
    		$droit = "0777";
    		$t_infoCreation = creerFichier($fichierChemin, $fichierNom, $fichierExtension, $fichierContenu, $droit);
    		echo "<pre>";
    		print_r($t_infoCreation);
    		echo "</pre>";
     
     
    		function creerFichier($fichierChemin, $fichierNom, $fichierExtension, $fichierContenu, $droit=""){
    		$fichierCheminComplet = $_SERVER["DOCUMENT_ROOT"].$fichierChemin."/".$fichierNom;
    		if($fichierExtension!=""){
    		$fichierCheminComplet = $fichierCheminComplet.".".$fichierExtension;
    		}
     
    		$leFichier = fopen($fichierCheminComplet, "wb");
    		fwrite($leFichier,$fichierContenu);
    		fclose($leFichier);
     
    		if($droit==""){
    		$droit="0777";
    		}
     
    		$t_infoCreation['fichierCreer'] = false;
    		if(file_exists($fichierCheminComplet)==true){
    		$t_infoCreation['fichierCreer'] = true;
    		}
     
    		$retour = chmod($fichierCheminComplet,intval($droit,8));
    		$t_infoCreation['permissionAppliquer'] = $retour;
     
    		return $t_infoCreation;
    		}
     
     
    		?>
    Ca fonctionne super bien, là je suis en train de regarder pour la fonction unlink() et si possible me faire un petit jquery tree et supprimer les articles désirés.

    Petite question au passage : y a-t'il un moyen simple pour faire une petite exécution de mon do_creation.php sans recharger ma page ? et du coup afficher (avec echo j'imagine) ma réponse dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="results"></div>
    par exemple ?

    Merci !
    (je vais update le titre du topic...) ==> en fait je ne sais pas faire

  7. #7
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Pour exécuter sans recharger la page, c'est du Ajax.

    Puisque tu utilises jQuery, tu peux utiliser la fonction "post": http://api.jquery.com/jQuery.post/

    Tu peux appeler ton do_creation.php avec les paramètres que tu veux et obtenir un petit bout d'HTML. Pour les paramètres, mets un id à tes input (ex: id="titre" sur ton input). Ensuite tu mets ce bout dans ton "results":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Javascript
    var letitre = $('#titre').val();
    var ladate= $('#date').val();
     
    $.post('do_creation.php', {titre: letitre, date: ladate}, function(data) {
      $('#results').html(data);
    });

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Tout d'abord, merci de prendre le temps de m'aider !
    Alors j'ai du me tromper quelque part car j'ai des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 4
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 5
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 6
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 7
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 8
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\config.php on line 9
     
    Warning: Cannot modify header information - headers already sent by (output started at E:\Sites\Alodra\prive\do_creation.php:12) in E:\Sites\Alodra\prive\do_creation.php on line 17
    Voilà ce que j'ai essayer de faire...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
        	<div id="creation">
     
            <form name="article" method="post" id="postform" action=""/>
             <div class="titre">Titre de l'article :</div>
     
              <input type="text" name="titre" id="titre" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
     
              <input type="text" name="date" id="date" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Texte de l'article :</div>
     
             <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
             <br>
    		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
            </form>	
            </div>      
     
            <div id="results">
                    // Javascript
                    <script type="text/javascript">
    				$("postform").submit(function(event) {
       				event.preventDefault(); 
    				var letitre = $('#titre').val();
    				var ladate= $('#date').val();
     
    				$.post('do_creation.php', {titre: letitre, date: ladate}, function(data) {
    				  $('#results').html(data);
    				});
    				});
    		</script>
     
            </div>
    Merci encore !

  9. #9
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Ça fait plaisir

    Pour ton erreur de session et de header, quand tu utilises la fonction session_start(), il ne faut pas qu'il y ait eu des lignes d'envoyées. Là ce qui est gossant, c'est que tu n'as certainement pas envoyé des lignes html, mais simplement des retours de lignes. Par exemple, dans ton do_creation.php, la ligne 1 est un retour de ligne. Il y a donc déjà du texte d'envoyé alors il n'est plus possible de faire un session_start() après cette ligne vide.

    Tes retours de lignes semblent être dans ton fichier config.php que tu sembles inclure dans ton do_creation.php. Vérifies bien au début et à la fin de ton fichier. Quitte à ouvrir le <?php sans jamais le fermer (donc sans mettre le ?> ) puisque si ton fichier fini avec le ?> suivit d'une ligne vide, cette ligne sera affichée.

    Ensuite, quand cela va fonctionner, juste pour préciser, il va manquer des champs de formulaires à ton code Javascript. Je n'ai mis que le titre et la date comme exemple.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Wouhou !
    Ca à l'air de fonctionner, du coup j'ai supprimer tout le code html de mon do_creation.php (ma protection par mp n'étant plus nécessaire j'ai également supprimer mon include congif.php.


    Les petits soucis en revanche... le corp de ma page n'ai plus affiché et l'exécution ce fait au lancement de la page et non pas au clic sur submit...

    Ca me donne ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
        <div id="creation">
     
            <form name="article" method="post" id="postform" action=""/>
             <div class="titre">Titre de l'article :</div>
     
              <input type="text" name="titre" id="titre" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Date d'ajout (format jj/mm/aaaa) :</div>
     
              <input type="text" name="date" id="date" value="" class="form" size="30" maxlength="2048"/><br>
     
              <div class="titre">Texte de l'article :</div>
     
             <textarea type="text" name="texte" value="" class="formtexte" size="300"/></textarea>
             <br>
    		<input type="submit"  id="poster" name="Submit" value="Publier l'article" class="button"/>
            </form>	
            </div>      
     
            <div id="results">
    <script type="text/javascript">
     
    		$.post('do_creation.php', function(data) {
    		  $('#results').html(data);
    		});
    </script>
            </div>
    J'ai "compresser" le javascript pour afficher ma réponse via un echo en php.

    EDIT : autant pr moi, la mise en page est revenue...forcément avec du css ça marche mieux

  11. #11
    Membre confirmé
    Avatar de provirus
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2009
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2009
    Messages : 248
    Points : 580
    Points
    580
    Par défaut
    Tu dois aussi binder le code JS à ton button submit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $('#poster').submit(function() {
    		$.post('do_creation.php', function(data) {
    		  $('#results').html(data);
    		});
     
    		return false; // Pour ne pas que ton form soumet en plus de la soumission AJAX
    });

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    Comme je l'ai souvent entendu dire : "l'amateurisme à ses limites..." ce qui est totalement faux quand on peu compter sur l'aide de certains !

    J'avais commencer à bidouiller un petit quelque chose sachant d'où venais le problème ......pitoyable ^^

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <script type="text/javascript">
                    $('#poster').click(function() {
                    $('#poster').click();
                    $.post('do_creation.php', function(data) {
                      $('#results').html(data);
                    });
                    });
    </script>

    J'ai essayé ton js mais cela ne fonctionne pas. Quand je supprime action="do_creation.php" de mon <form> et que je click cela me rafraichi la page sans exécuter la requête. En revanche, quand je remet le action="do_creation.php" le php prend le dessus et ma requête est prise en compte.



    EDIT : C'est bon ! Merci beaucoup pour ton aide Simon !!

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    186
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 186
    Points : 98
    Points
    98
    Par défaut
    J'ai en fait abandonné cette idée car elle ne me convient pas compte tenu de mon faible niveau pour la suite...
    Mais un grand merci encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/11/2010, 19h56
  2. Probléme lecture fichier text.
    Par deppierre dans le forum Windows
    Réponses: 7
    Dernier message: 15/12/2009, 19h11
  3. Problème de lecture fichier texte
    Par Draconic dans le forum Visual C++
    Réponses: 1
    Dernier message: 05/08/2007, 18h00
  4. Problème STL lecture fichier texte
    Par Bourrine dans le forum VC++ .NET
    Réponses: 4
    Dernier message: 03/04/2007, 11h57
  5. [VB.NET]Problème lecture fichier texte
    Par zouhib dans le forum Windows Forms
    Réponses: 2
    Dernier message: 29/05/2006, 16h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo