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 :

ne pas mettre un \ devant chaque " ' " dans un echo


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut ne pas mettre un \ devant chaque " ' " dans un echo
    Bonjour,

    Je fais un copier/coller des messages que je veux ensuite afficher avec un écho.
    Ce message comporte plein de " ' ". Plutôt que de mettre un \ devant chaque " ' ", je voudrai automatiquement qu'il ne tienne pas compte des " ' ".
    Comment faire. J'ai essayé d’utiliser htmlentities, mais sans succès
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ...
    $message = '
    l'information ..
    d'un
    ...
    ';
    $message = nl2br($message); //
    $message = htmlentities($message, ENT_NOQUOTES);); 
    ..
    echo $deb .$message .$fin ;

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Utilise la syntaxe heredoc.

    A+.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à partir du moment où tu fais un copier-coller "à la main", qu'est-ce qui t'empêche de faire un "rechercher/remplacer" ??
    N'importe quel éditeur de texte digne de ce nom a cette fonctionnalité.


    [EDIT] Heredoc, c'est bien aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $message = <<<EOT
    l'information ...
    d'un
    ...
    ';
    EOT;

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Bonsoir,
    J'avoue que c'est la flemme, la lisibilité (avec le retour à la ligne) et le côté esthétique
    Je ne connaissais pas cette possibilité que j'adopte immédiatement (sauf si vous voyez des inconvénients : ralentissement pour un site web)
    Merci

    Autre petit problème:
    avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = nl2br($message); //
    mon message!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h3>Etapes pour devenir membre</h3>
    <ol>
    	<li>Une fois validée la saisie, vous recevrez un email pour être sûr de votre email.</li>
    a un rendu inapproprié car il me rajoute un saut de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h3>Etapes pour devenir membre</h3><br>
    <ol><br>
    une solution pour un retour à la ligne sauf code html ?

    @+
    ps: juste enlevé "';" de ton exemple

  5. #5
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    Citation Envoyé par herveD Voir le message
    Autre petit problème:
    avec mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $message = nl2br($message); //
    mon message!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <h3>Etapes pour devenir membre</h3>
    <ol>
    	<li>Une fois validée la saisie, vous recevrez un email pour être sûr de votre email.</li>
    a un rendu inapproprié car il me rajoute un saut de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <h3>Etapes pour devenir membre</h3><br>
    <ol><br>
    une solution pour un retour à la ligne sauf code html ?
    Ouh bah là, c'est une autre paire de manches! Il va falloir parser la chaîne comme du html (ce qu'elle est de toute manière), et remplacer chaque nœud texte non blanc par plusieurs nœuds texte séparés d'un nouvel élément <br>. Pour ce faire, tu dois utiliser DOMDocument, exemple:
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    $html = <<<'EOD'
    <h3>Etapes pour devenir membre</h3>
    <ol>
    	<li>Une fois validée la saisie, vous recevrez un email pour être sûr de votre email.</li>
        <li>Un item avec un
            "vrai" saut de ligne</li>
        <li>
            Un autre item avec un saut de ligne au début et à la fin qu'on va ignorer
        </li>
    </ol>
    EOD;
     
    $dom = new DOMDocument;
     
    // évite l'affichage des erreurs ou des warnings lors du parsing html en les renvoyant vers le gestionnaire
    // d'erreur de libxml. On préserve l'ancien état, renvoyé par la fonction, dans $state.
    $state = libxml_use_internal_errors(true);
     
    // comme il s'agit probablement d'un document html partiel (sans élément racine et sans encodage spécifié)
    // on rajoute une structure pour que DOMDocument s'y retrouve sans effectuer ses propres "corrections".
    $dom->loadHTML('<html><head><meta charset="UTF-8"></head><body>' . $html . '</body></html>');
     
    // on requiert tous les noeuds texte contenant soit \n soit \r à l'aide du langage XPath
    $xp = new DOMXPath($dom);
    $textNodes = $xp->query("//text()[contains(., '\n') or contains(., '\r')]");
     
    foreach ($textNodes as $textNode) {
        $text = trim($textNode->nodeValue);
     
        // Si $text est vide, cela signifie que le texte est blanc donc on zappe.
        if ( empty($text) ) continue;
     
        // à la place d'explode, on utilise preg_split avec \R qui est un alias pour les trois séquences
        // d'échappement les plus courantes (\r\n pour Windows, \n pour UNIX/Linux, \r pour les vieux OS Mac)
        $parts = preg_split('~\R~', $text);
     
        // S'il n'y a qu'une partie, ça veut dire qu'il n'y a pas de nouvelle ligne donc on zappe
        if ( count($parts) == 1 ) continue;
     
        // On crée un fragment de document html destiné à remplacer le noeud texte.
        $fragment = $dom->createDocumentFragment();
     
        // On garde la dernière partie de coté ...
        $lastPart = array_pop($parts);
     
        // ... pour pouvoir intercaller un élément br entre chaque nouveau noeud texte sans
        //  qu'il y en est un en trop à la fin.
        foreach ($parts as $part) {
            $fragment->appendChild($dom->createTextNode($part));
            $fragment->appendChild($dom->createElement('br'));
        }
     
        $fragment->appendChild($dom->createTextNode($lastPart));
     
        // on remplace le noeud texte par le fragment
        $textNode->parentNode->replaceChild($fragment, $textNode);
    }
     
    // on enregistre le résultat sans la structure ajoutée au début en concaténant les noeuds enfant de body:
     
    $result = '';
     
    foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $childNode) {
        $result .= $dom->saveHTML($childNode);
    }
     
    // on restitue l'ancien état
    libxml_use_internal_errors($state);
     
    echo $result;
    Mais bien entendu, cette manipulation ne doit pas être exécutée à chaque appel de la page mais effectuée une fois pour toutes, puis on stocke le résultat quelque part.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Pour ma part, j'ai pris l'habitude de mettre une chaîne de caractères entre apostrophes, sauf si elle contient une apostrophe, auquel cas je la mets entre guillemets.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $texte_sans_apostrophe = 'Je suis ton père !';
    $texte_avec_apostrophe = "Que j'aime à faire apprendre un nombre utile aux sages !";
    $sql = "
        INSERT INTO latable (col1, col2)
        VALUES ('texte fixe', :parametre)
    ";
    echo '<a href="darkVador.php">'.$texte_sans_apostrophe.'</a>';
    Quand j'ai du texte avec apostrophes et guillemets, je fais plutôt de la concaténation.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    269
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 269
    Par défaut
    Bonjour,
    Merci pour vos différentes solutions, c'est super :-)
    @ CosmoKnacki
    pour le stocker ou?, je suis sur des cms type joomla, wordpress.Je n'ai pas vraiment envie de partie sur une solution très sophistiquée, je souhaite juste être vigilant au temps de traitement pour le web

    Je crois que je vais essayer de traiter les chaînes qui sdont ans ce cas sont très distinctes, sinon je collerai toutes les balises HTML en oubliant mes souhaits d'esthète !
    Bonne journée

  8. #8
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    La syntaxe nowdoc (même page du manuel) serait encore mieux pour éviter l'interprétation des signes $ devant des caractères alphanumériques comme un nom de variable.

    Citation Envoyé par jreaux62 Voir le message
    qu'est-ce qui t'empêche de faire un "rechercher/remplacer" ??
    Des éventuels quotes qui seraient déjà échappés (on sait jamais).

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 10/11/2005, 17h28
  2. [CSS] : Ne pas mettre de couleur à un lien
    Par deck dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 29/10/2005, 13h57

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