2009-07-22 8 views
2

Cela pourrait être quelque chose que je ne peux pas faire, mais ...Comment puis-je éviter JavaScript correctement dans JavaScript?

parent.document.getElementById('<?php echo $_GET['song']; ?>') 
    .innerHTML = '<img src="heart.png" onmouseover="heartOver('');" >'; 

La partie onmouseover="heartOver(''); me brise JavaScript. Y a-t-il un moyen d'échapper aux citations afin que je puisse le faire?

+0

Il serait plus clair si vous avez utilisé le code HTML ce produit - le PHP n'a rien à voir avec elle dans ce cas. – Greg

+0

@Greg: Je l'ai juste réduit au bit qu'il est réellement concerné. Espérons que cela aide ... – Shog9

Répondre

3

citations d'échappement imbriquées avec une barre oblique inverse: \'

De plus, jamais données utilisateur écho sans valider ou désinfectante il:

$song = $_GET['song']; 

// Validate HTML id (http://www.w3.org/TR/REC-html40/types.html#type-name) 
if(!preg_match('/^[a-z][-a-z0-9_:\.]*$/', $song) { 
    // Display error because $song is invalid 
} 

OU

// Sanitize 
$song = preg_replace('/(^[^a-z]*|[^-a-z0-9_:\.])/', '', $song); 
5

Il est tout simplement une question d'échapper aux citations correctement.

parent.document.getElementById('<?php echo $_GET['song']; ?>').innerHTML = 
    '<a href="heart.php?action=unlove&song=<?php echo $song; ?>" target="hiddenframe">' 
    + '<img src="images/heart.png" alt="Love!" onmouseover="heartOver(\'\');" width="16" height="16" border="0"></a>'; 

De plus, il vous manque la fin de l'attribut alt.

+0

Belle prise sur la citation de fin manquant. – hbw

1

Votre problème concerne les devis qui s'échappent. Vous pouvez échapper à une citation simple ou double en remplaçant «ou» par «ou».

donc votre code serait:

parent.document.getElementById('<?php echo $_GET['song']; ?>').innerHTML = '<a href="heart.php?action=unlove&song=<?php echo $song; ?>" target="hiddenframe"><img src="images/heart.png" alt="Love! onmouseover="heartOver(\'\');" width="16" height="16" border="0"></a>';

Questions connexes