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

上述只是一個簡單的字符串的一部分,我正在使用一個JavaScript函數內的div的innerHTML屬性的更改。如果該變量包含一個包含JavaScript可解析數據(解釋數據)的字符串(如添加符號或引號等),那麼「某些變量的文本充滿」就是問題 - 腳本會中斷。我如何避免這種情況?順便說一句,這個變量對每個用戶都是動態的,它由一個php回聲聲明填充,並在後端插入到javascript中。我已經想過如何用另一種方式來完成這個任務,但沒有一個人想到。這些數據來自數據庫,我使用PHP進行抽取,並且需要將其插入到此動態創建的textarea中,並基於通過innerHTML的用戶命令將其插入到頁面中。謝謝你的幫助。插入文本到一個textarea使用JavaScript沒有JavaScript解析文本

編輯:請求的上下文功能:

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

你能告訴我們包括php – mcgrailm 2011-04-21 03:00:57

+0

的上下文簡而言之,我試圖逃避動態輸入,以便解釋器不會將a +解釋爲javascript命令或引號作爲命令等,以便我甚至可以在頁面上顯示數據如果用戶可能已經輸入了這些符號之一等。這可能有助於解釋它下注之三。 – linus72982 2011-04-21 03:01:16

+0

當然 - <?php echo $ userInfo ['signature']; ?> – linus72982 2011-04-21 03:01:44

回答

1

好像你需要逃避HTML和單引號。您可以使用PHP的內置htmlentities功能做到這一點,像這樣:

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

我正在考慮使用JavaScript函數,如轉義,但後來意識到它不會轉義JavaScript運算符等。然後我想着使用addslashes,並意識到它可能不會逃避JavaScript可能想要解析的所有內容 - 謝謝,htmlentities可能會起作用。 – linus72982 2011-04-21 03:40:33

1

您需要任何特殊字符在服務器轉換爲HTML實體,通過它在一切都太遲了客戶的時間。例如:在字符串中插入時

"foo <= bar" 

成爲

&ldquo;foo &le; bar&rdquo; 

,然後就變成了:

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

而不是

""foo <= bar"" 

這顯然會亂用腳本在客戶端。你也可以使用unicode轉義序列。

+0

感謝您的意見,這就是我一直在尋找的。 – linus72982 2011-04-21 03:41:28

0

如果你需要它的客戶由於其他原因上完成,此作品(測試):

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

所以,這樣的事情就可以了(未經測試):

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']; ?>'; 
    }