2011-04-21 7 views
2
'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
+ SOME VARIABLE FULL OF TEXT 
+ '</textarea>' 

Ce qui précède est juste une partie d'une chaîne simple que j'utilise avec un changement à un attribut innerHTML d'une div à l'intérieur d'une fonction javascript. Que "QUELQUES VARIABLES PLEIN DE TEXTE" est le problème, si cette variable contient une chaîne qui contient des données javascript parseable (données à interpréter) comme des symboles d'addition ou des citations, etc - le script se brise. Comment puis-je éviter cela? En passant, la variable est dynamique pour chaque utilisateur, elle est remplie par une déclaration php echo et donc insérée dans le backend dans le javascript. J'ai réfléchi à la manière d'accomplir cela d'une autre manière, mais aucune ne vient à l'esprit. Les données proviennent d'une base de données, je la tire avec PHP et j'ai besoin de l'insérer dans cette zone de texte créée dynamiquement et insérée dans la page en fonction d'une commande utilisateur via innerHTML. Merci pour toute aide.insérer du texte dans une zone de texte en utilisant javascript sans javascript analyse le texte

Edit: fonction contexte demandé:

else if (theChange == 'signature') { 
     document.getElementById('userPanelChangeBox').innerHTML = 
     '<form action="tinUser_processor.php" method="post">' 
     +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />' 
     +'Enter your new signature:<br /><br />' 
     +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
     +'<?php echo $userInfo['signature']; ?>'+'</textarea><br /><br />' 
     +'<input type="hidden" value="signature" name="typeChange" />' 
     +'<input type="submit" value="Submit Change" name="submitter" /></form>'; 
     } 
+0

pourriez-vous nous montrer le contexte incluant le php – mcgrailm

+0

En d'autres termes, j'essaie d'échapper à l'entrée dynamique pour que l'interprète n'interprète pas un + comme une commande javascript ou un guillemet comme une commande, etc afin que je puisse afficher des données sur la page même si l'utilisateur a entré un de ces symboles, etc. Cela pourrait aider à expliquer sa mise ter. – linus72982

+0

Bien sûr - linus72982

Répondre

1

On dirait que vous devez échapper HTML et des guillemets simples. Vous pouvez utiliser la fonction PHP htmlentities intégré pour le faire, comme ceci:

<?php echo htmlentities($userInfo['signature'], ENT_QUOTES); ?> 
+0

Je pensais utiliser des fonctions javascript comme escape mais je me suis rendu compte qu'il n'échappait pas aux opérateurs javascript et autres. Puis j'ai pensé à utiliser addslashes et je me suis rendu compte qu'il pourrait ne pas échapper à tout ce que javascript pourrait vouloir analyser - htmlentities fonctionnera probablement, merci. – linus72982

1

Vous devez convertir des caractères spéciaux aux entités HTML au niveau du serveur, au moment où il est au client, il est trop tard. par exemple:

"foo <= bar" 

devient

&ldquo;foo &le; bar&rdquo; 

puis lorsqu'il est inséré dans la chaîne devient:

"&ldquo;foo &le; bar&rdquo;" 

plutôt que

""foo <= bar"" 

qui va clairement jouer avec le script à le client. Vous pouvez également utiliser des séquences d'échappement Unicode.

+0

Merci pour la contribution, c'est ce que je cherchais. – linus72982

0

Si vous en avez besoin fait sur le client pour d'autres raisons, cela fonctionne (testé):

<textarea id=text></textarea> 
<script type="text/javascript"> 
var signature = "<div>Not actually a div.</div>"; 
document.getElementById('text').value=signature; 

Donc, quelque chose comme cela fonctionnera (non testé):

else if (theChange == 'signature') { 
    document.getElementById('userPanelChangeBox').innerHTML = 
    '<form action="tinUser_processor.php" method="post">' 
    +'Signatures cannot contain any markup (HTML, BBCode, etc) or styling and can only be 4 lines<br />' 
    +'Enter your new signature:<br /><br />' 
    +'<textarea name="textChange" class="signatureChangeText" cols="100" rows="4">' 
    +'</textarea><br /><br />' 
    +'<input type="hidden" value="signature" name="typeChange" />' 
    +'<input type="submit" value="Submit Change" name="submitter" /></form>'; 
    document.getElementById('userPanelChangeBox').textChange.value='<?php echo $userInfo['signature']; ?>'; 
    } 
Questions connexes