Fonction javascript appeler dans php erreur

L’auteur de ce sujet a trouvé une solution à son problème.
Auteur du sujet

Bonjour chers amis j’ai un probleme dont j’ai chercher la solution sans succes. Je vous explique

'<button onclick=alimente_dictionnaire("'.$donnees[$_GET['langue_depart']].'")
    style="margin-top: 5px;" class="btn btn-default">'
    .$donnees[$_GET['langue_depart']].
'</button>';

La fonction fonctionne normalement mais lorsque

$donnees[$_GET['langue_depart']]

ramène une phrase contenant des espaces comme "banane plantain" la fonction ne fonctionne plus et j’ai remarqué que c’est l’espace qui fait défaut puisque lorsque j’utilise l’inspecteur de code je vois que l’argument a été mal interprété. Je vois ceci :

onclick='alimente_dictionnaire("banane"plantain")=""

Pouvez-vous m’aider ?

Merci pour vos différentes réponses.

À la recherche de la connaissance.

+0 -0

Pour un exercice l’exemple convient mais pour un usage en production ton code n’est pas sûr du tout.

Pour ce que tu veux faire, les tendances d’aujourd’hui pousse à utiliser un attribut data (tu peux en apprendre plus avec Utiliser les attributs de données et data-*).

Ton code HTML devrait ressembler à :

<button
   class="button-lg"
   data-langue-depart="<?=htmlentities($langue) ?>"
>Envoyer</button>

Par défaut, htmlentities : Convertit tous les caractères éligibles en entités HTML, avec quelques particularités selon le deuxième argument facultatif.

  • Convertit les guillemets doubles, et ignore les guillemets simples
  • Gère le texte comme étant du HTML 4.01.

Donc ça va convertir les guillemets double " pour éviter les erreurs.

Ensuite la deuxième tendance veut qu’on sépare le HTML du JS. Donc aucun JS dans le HTML. Ce qui permet aussi d’avoir un code plus claire.

Au lieu de onclick, il faudrait utiliser addEventListener.

document.querySelectorAll(".button-lg").addEventListener("onclick", alimente_dictionnaire)

Le premier argument de aliment_dictionnaire sera event, donc tu feras : event.target.dataset.langueDepart (d’après ce qui est expliqué sur la documentation mdn que je t’ai mis ci-dessus).

+2 -0
Auteur du sujet

Ce code ce trouve dans un fichier php pas dans un HTML et le htmlentities ne permet pas d’échapper ces espaces.

comme ceci :

while($donnees = $req->fetch()){
            $resultat2 .= '<button onclick=alimente_dictionnaire("'.$donnees[$_GET['langue_depart']].'")
style="margin-top: 5px;" class="btn btn-default">'
                                .$donnees[$_GET['langue_depart']].
                          '</button>';
        }
        
        echo $resultat2."|".$resultat;

Merci a vous

À la recherche de la connaissance.

+0 -0

Peut-être :

   '<button onclick="alimente_dictionnaire(\\\"'.$donnees[$_GET['langue_depart']].'\\\")"

Mais fait comme je t’ai dis avec data-*, ça évite les erreurs.

Édité par anonyme

+0 -0

Ce n’est pas commode de passer les arguments comme ça, c’est source d’erreur. Il vaut mieux faire :

   '<button data-langue-depart="'.$donnees[$_GET['langue_depart']].'" onclick="alimente_dictionnaire()"'

Car l’escape des guillemets n’est pas évident.

Édité par anonyme

+0 -0

le code :

<?php

echo '<a title="'.htmlentities('"banane"plantain"').'">lol</a>';

le html :

<a title="&quot;banane&quot;plantain&quot;">lol</a>

le rendu à l’écran :

image.png
image.png

Je ne vois pas où est le problème

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte