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

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    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 éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    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
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    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 éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    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.'};
    ';
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    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 éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    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};
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    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.

  8. #8
    Membre éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    pour visualisér le fichier resultat tu utilise quel programme, le problème viens peut-être de la ?
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    j'utilise également notepad++, je travail en local actuellement. Mais je code avec un clavier QWERTZ, peut-être que ça influe... je n'ai pas vraiment d'idée. Toi tu l'ouvres avec un éditeur de texte ? ou avec ton navigateur ?

  10. #10
    Membre éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    ici je travaille sous Ubuntu, avec Geany comme éditeur (équivalent a notepad++), demain j'essayerai avec Notepad++ au bureau.
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    je vais effectuer une série de test ce soir également, je te tiens au courant si ça t'intéresse ;-)

    edit : je viens d'essayer le tout premire code que tu m'as donné, et moi j'obtiens

    string(53) "ceci est un test \\ slash / backslash fin du test "

    Le slash est doublé, je m'y perds dans ces histoires.

  12. #12
    Membre éprouvé 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 : 60
    Localisation : Belgique

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Points : 1 103
    Points
    1 103
    Par défaut
    ajoute
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo "<hr>".get_magic_quotes_runtime()."<hr>";
    si tu a 1 il supprime le "\"
    si tu a 0 il ne supprime pas le "\"

    donc pour ne plus avoir le phénoméne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    set_magic_quotes_runtime(false);
    tu devrais vérifier ce parametre dans php.ini
    je comprend pourquoi il est
    This feature has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 5.4.0.
    dans le manuel php.net
    http://www.php.net/manual/en/info.co...quotes-runtime
    ce message vous a aidé ! Un petit click sur fait toujours plaisir

    "Nos études ont montré que la probabilité qu’un programme corrigé fonctionne comme avant la correction est seulement de cinquante pour cent." Bev Littlewood & Lorenzo Strigini

    "Le logiciel, c’est comme le sexe, c’est meilleur quand c’est libre/gratuit." Linus Torvalds

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 22
    Points : 18
    Points
    18
    Par défaut
    Je te remercie pour ton aide gracieuse, je n'ai malheureusement plus de temps mais ce soir je ferais une batterie de test et j'essaierais de comprendre un peu mieux comment ça fonctionne tout ça. Merci beaucoup en tout cas.

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