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 :

Suppression de backslashs avec fwrite()


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut Suppression de backslashs avec fwrite()
    Bonjour à tous,

    je développe actuellement un générateur de CV en LaTeX et je bute sur un problème :

    Le principe est simple, on remplit un formulaire, les donnees sont envoyées par POST à une page qui actuellement ne place que le contenu dans un fichier .tex et est proposé en téléchargement à l'utilisateur.

    -La partie formulaire fonctionne, je génère un string qui contient le corps de mon document LaTeX (preuve : lorsque je demande un echo de ma variable $letter_content, mon texte s'affiche correctement).

    -Je stocke tout le contenu de cette variable de type string dans un fichier texte avec fwrite(), mais quand j'ouvre ce fichier (je bosse en local), les backslashs sont supprimés. Le problème vient donc de la fonction fwrite(), mais je ne trouve que des descriptions sommaires de cette fonction, et rien d'approfondi qui me permettrait d'expliquer ce mystère.

    Avez-vous une idée ? un lien ? (je suis peut-être passé à côté d'une page intéressante...)

    Merci d'avance


    [EDIT] Par un procédé miraculeux que j'ai encore du mal à comprendre, la fonction file_put_contents ne produit pas la même erreur, même si http://php.net/manual/fr/function.file-put-contents.php indique que cette fonction revient à appeler fopen, fwrite et fclose, ce que je faisait déjà initialement... J'espère que ça a pu aider certains^^

  2. #2
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    j'ai fait le test suivant:
    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
    <form method='post'>
    <textarea name='letter_content'>
    ceci est un test \ slash / backslash fin du test
    </textarea>
    <!--input type='text' name='letter_content' value='\/est'-->
    <input type='submit'>
    </form>
    <?php
    if(isset($_POST["letter_content"]))
    {
    	$letter_content	=$_POST["letter_content"];
     
    	var_dump($letter_content);
     
    	$hande = fopen("test.txt","w");
    		//fwrite($hande , addslashes($letter_content)."\n");
    		fwrite($hande , $letter_content."\n");
    	fclose($hande);
    }
    ?>
    J'ai bien dans mon fichier test.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ceci est un test \ slash / backslash fin du test

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut
    Hmm, pour être exact, tout n'est pas envoyé par POST, seulement quelques paramètres, par exemple l'utilisateur rentre son nom, dans le fichier qui reçoit la requête POST je fais le traitement suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    if(isset($_POST["name"])){
     
     $name=_POST["name"];
     
    	$handle = fopen("test.txt","w");
    $letter_content = '
    \documentclass[11pt]{lettre} 
    \name{'.$name.'};
    ';
    fwrite($handle , $letter_content."\n");
    fclose($handle);
    }
    mes deux backslashs sont respectivement supprimés. La seule chose que je fais en plus de toi c'est traiter la variable $letter_content dans mon fichier php... étrange.

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    faut tout dire (lol) sinon on comprends pas bien
    tu doit doubler les backslash dans une chaine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $letter_content = '
    \\documentclass[11pt]{lettre} 
    \\name{'.$name.'};
    ';

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut
    Oui excuse moi le faire-savoir c'est pas mon fort xD Tu te doutes bien que j'ai déjà essayé les doubles backslash ^^, ça ne marche pas hélas... par contre je viens de me rendre compte qu'en en mettant 4 d'affilé, j'arrive à en obtenir un, c'est débile non ?

  6. #6
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $name='test_de_nom';
     
    $letter_content = '
    \\documentclass[11pt]{lettre} 
    \\name{'.$name.'};
    ';
    var_dump($letter_content);
     
    $hande = fopen("test.txt","w");
        fwrite($hande , $letter_content."\n");
    fclose($hande);
    donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    \documentclass[11pt]{lettre} 
    \name{test_de_nom};

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Par défaut
    je m'y suis repris à 3 fois, et non, ce code ne fonctionne pas chez moi :
    - Npp est en utf8
    - Dans mon document php je déclare une entête html5 avec un charset=utf-8


    Les backslashs sont toujours supprimés.

Discussions similaires

  1. [VBA-E] Suppression des colonnes avec condition
    Par desdenova dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2007, 13h39
  2. Réponses: 17
    Dernier message: 13/11/2006, 11h55
  3. Réponses: 4
    Dernier message: 11/11/2006, 19h50
  4. Suppression de fichiers avec csh
    Par mavina dans le forum Linux
    Réponses: 9
    Dernier message: 28/04/2006, 11h10
  5. Problème avec fwrite() : besoin d'un coup de main
    Par yopuke dans le forum Langage
    Réponses: 2
    Dernier message: 16/04/2006, 09h43

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