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

JavaScript Discussion :

function replace et erreur avec retour a la ligne


Sujet :

JavaScript

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut function replace et erreur avec retour a la ligne
    Bojour,

    J'utilise la fonction suivante pour recuperer des commentaires


    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
    $sql6 = "SELECT commentaire FROM bdd where lien_id=".$result["id"]."";
    $requete6 = mysql_query( $sql6, $links ) or die;
     
    $table6 = array();
    while ($row6 = mysql_fetch_array($requete6)){
     
    array_push($table6,$row6);
    }
     
    $commentaire = array();
    $total_table6 = count($table6);
    for ($i=0; $i < $total_table6; $i++)
    {
    	$commentaire[]= $table6[$i]['commentaire'];
    }
    $sumcom = implode(",", $commentaire);
    Puis le affiche dans une div avec la fonction


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script language="javascript">
     function replace(obj,text)
    {
      var el = document.getElementById(obj);
      el.innerHTML =  text;
     }
    </script>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href ="#" onclick="replace('zone_news',''.$sumcom.'')" >Lire </a>
     
    <div  id="zone_news"></div
    >

    Le commentaire s'affiche bien dans la DIV sauf si l'utilisateur a fait un retour a la ligne (enter) lorsqu'il a ecrit son commentaire.
    Comment faire que cela ne pose pas de probleme a la fonction replace?

    Merci

  2. #2
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Si tu veux que les sauts de ligne soient convertis en <br />, il existe la fonction PHP nl2br().
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $commentaire[]= nl2br($table6[$i]['commentaire']);

    Edit:

    La ligne ci-dessous est erronée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href ="#" onclick="replace('zone_news',''.$sumcom.'')" >Lire </a>
    Essaie ceci...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="#" onclick="replace('zone_news','<?php echo rawurlencode($sumcom); ?>')">Lire</a>
    Et dans la fonction replace()...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    el.innerHTML=unescape(text);

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    En fait ce serait plus de supprimer les espace qui ne semble pas etre accepte avec ma fuonction JS.

    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $commentaire[]= nl2br($table6[$i]['commentaire']);
    j'ai le message

    Message: Unterminated string constant
    Line: 536
    Char: 176
    Code: 0

    en fait il me met un <br /> a la fin de ma ligne mais ce n'est pas cela qu'il faudrait mais plutot ne plus avoir aucun retour a la ligne ou mieu
    que function replace accepter les retour a la ligne pour garder la meme presentation que ce que l'utilisateur a ecrit

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Excuse moi j'avais pas vu la fin du message

    Je suis dans un tableau,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="#" class="Style7"  onclick="replace(\'zone_news\',\'rawurlencode('.$sumcom.');\')">Lire</a></td></tr>
    Cela ne fonctionne toujours pas encore le meme message
    Message: Unterminated string constant

  5. #5
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    rawurlencode() est une fonction PHP...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="#" class="Style7" onclick="replace(\'zone_news\',\''.rawurlencode($sumcom).'\')">Lire</a></td></tr>';

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Merci beaucoup Eric2a, Maintenant ca fonctionne bien! sauf que je recupere du texte avec des carractere ascci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    la restauration rapide n\'est pas considérée comme un exemple à suivre mais dans ce \"resto\" la propreté est

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Problême de charset...

    Quel encodage utilises-tu pour la page XHTML et la base de données ? (ISO-88559-1, UTF-8, ...)

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    et UFT-8 aussi pour la BDD

  9. #9
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Je ne comprends pas pourquoi.

    Et avec la fonction htmlspecialchars() ?
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ($i=0; $i < $total_table6; $i++){
    	$commentaire[]=trim($table6[$i]['commentaire']);
    }
    $sumcom=nl2br(htmlspecialchars(implode(',',$commentaire),ENT_QUOTES));
     
    //
     
    echo '<a href="#" class="Style7" onclick="replace(\'zone_news\',\''.$sumcom.'\')">Lire</a></td></tr>';

  10. #10
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par voyageurdumonde Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" >
    et UFT-8 aussi pour la BDD
    Et le fichier php ?
    Voir : Passez à l'UTF-8 sans manquer une étape

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    salut, Oui Eric2a, avec ce code les caracteres sont OK mais je retrouve le probleme du debut avec le fait que si j'ai un retour a la ligne entregistre dans ma BDD <br> ca plante la fonction remplace.

    Si je place
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header( 'content-type: text/html; charset=utf-8' );
    en debut de code PHP ca ne change rien


    voici comment la variable $sumcom est ecrit Gilles%20le%20g%C3%A9rant avant d'etre envoye a la function replace et le resultat a l'ecran donne: Gilles le gérant.

    Il doit bien exister une solution?

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Peut-on recupere directement la variable avec innerHTML
    ?
    Style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script language="javascript">
     function replace(obj,text)
    {
      var el = document.getElementById(obj);
      el.innerHTML=decodeURIComponent("<?=rawurlencode($touslescommentaires). ?>");
     }
    </script>
    Merci

  13. #13
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    pourquoi redefinir la fonction replace qui est native en js ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     function replace(obj,text)

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    salut, J'ai un probleme d'encodage avec le resultat que me renvoi function replace comme decrit dans le message precedent et je cherche comment faire pour solutionner cela

  15. #15
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Tente à nouveau en placant après le code ci-dessous :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for ($i=0; $i < $total_table6; $i++){
    	$commentaire[]=trim($table6[$i]['commentaire']);
    }
    Soit la version avec htmlspecialchars() que je te recommande pour une raison évidente de sécurité...
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sumcom=nl2br(htmlspecialchars(implode(',',$commentaire),ENT_QUOTES,'UTF-8'));
    Soit la version avec rawurlencode() - juste pour montrer qu'il fallait utiliser utf8_decode()... -
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sumcom=rawurlencode(utf8_decode(nl2br($sumcom)));

    Immédiatement suivi de
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sumcom=str_replace(array("\r","\n"),'',$sumcom);
    pour supprimer tout sauts de ligne dans la chaine.


    Ensuite, SpaceFrog a raison (comme d'hab.) : Il est préférable de renommer la fonction.

    Cette dernière peut effectivement contenir le contenu de la variable.

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function comReplace(obj){
    	var el=document.getElementById(obj);
    	if(obj)el.innerHTML=unescape('<?php echo $sumcom; ?>');
    };

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<a href="#" class="Style7" onclick="comReplace(\'zone_news\')">Lire</a></td></tr>';

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    Merci Merci Merci.... mille fois merci Eric2a

    Meme si avec la function comReplace cela ne fonctionne pas, ca m'a permis de regler le probleme.

    Voila la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for ($i=0; $i < $total_table6; $i++){
    	$commentaire[]=trim($table6[$i]['commentaire']);
    }
     
    $sumcom=nl2br(htmlspecialchars(implode(',',$commentaire),ENT_QUOTES,'UTF-8'));
    $sumcom=stripslashes($sumcom);
    $sumcom=rawurlencode(utf8_decode(nl2br($sumcom)));
    $sumcom=str_replace(array("\r","\n"),'',$sumcom);
    et le onclick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="#" class="Style7" onclick="replace(\'zone_commentaire\',\''.$sumcom.'\')Lire</a>

    C'est un peu complique mais ca fonctionne.

    Autre question, google va-t-il reussir a interpreter le code style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Ce%20resto%20situe%20en%20plein%20c%3Fur%20de%20Rennes%20une%20e
    Car c'est ce que donne de ma page index.php?

  17. #17
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    tu devrais regarder de ce coté là...
    http://j-willette.developpez.com/tut...-site-en-utf8/

  18. #18
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    En fait, il faut utiliser soit la fonction htmlspecialchars(), soit la fonction rawurlencode(). La première étant plus sûre afin que d'éventuelles balises HTML inclus dans les commentaires ne soient pas intérprétées.

    J'avais quand-même posté la ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sumcom=rawurlencode(utf8_decode(nl2br($sumcom)));
    pour montré qu'il etait nécessaire d'utiliser la fonction utf8_decode() dans ton cas.

    Citation Envoyé par voyageurdumonde
    avec la function comReplace cela ne fonctionne pas
    C'est à dire ?

    Citation Envoyé par voyageurdumonde
    google va-t-il reussir a interpreter le code
    Dans ce cas précis, le commentaire ne sera pas indéxé car il fait parti du code Javascript.

    Tu peux le placer "en dur" dans la page HTML et le rendre visible à l'aide d'une fonction.

    Exemple...
    Code php : 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
     
    <script type="text/javascript">//<![CDATA[
    	function showCom(obj){
    		var el=document.getElementById(obj);
    		if(el)el.style.display='block';
    	};
    //]]>
    </script>
     
    <div id="zone_commentaire">
    <?php echo $com; ?>
    </div>
     
    <?php
    echo '<a href="#" class="Style7" onclick="showCom(\'zone_commentaire\')">Lire</a></td></tr>';
    ?>

  19. #19
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    478
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2007
    Messages : 478
    Points : 189
    Points
    189
    Par défaut
    salut,

    Si j'utilise la fonction htmlspecialchars(), je retrouve le probleme avec les retour a la ligne et ca ne fonctionne pas. Si j'utilise rawurlencode j'obtiens de backslash partout dans mon texte et meme avec stripslashes il reste quand meme.
    Je ne comprends pas pourquoi cela fait ca mais ca fonctionne en mettant les deux fonctions l'une derriere l'autre. Sauf si cela pose un probleme de securite majeure, je pense que je vais reste avec cela pour l'instant.

    Pour le texte et google je vais juste le faire apparaitre avant de l'encoder dans une Div qui sera hidden.

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/10/2022, 15h29
  2. INSERT Avec Retour a la ligne
    Par jeorcal dans le forum Requêtes
    Réponses: 6
    Dernier message: 30/09/2010, 11h17
  3. Réponses: 4
    Dernier message: 19/08/2009, 15h03
  4. Concatenation string avec retour a la ligne
    Par X-Nem dans le forum SAP
    Réponses: 1
    Dernier message: 25/08/2008, 16h09
  5. [XSL~FO] Affichage avec retour a la ligne
    Par mrkzed dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 15/03/2007, 15h07

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