2017-10-13 45 views
0

示例數據庫值是'12345'它被分配給一個PHP變量$nameMySQL數據庫包含引號編碼和未編碼,它正在打破javascript

onclick="assign('<?php echo $name;?>') 

什麼是解決這個問題的最好辦法:

該值在例如javacript onclick事件中使用?

onclick="assign('<?php echo $name;?>') 
// output: onclick="assign(''12345'') 

onclick="assign('<?php echo htmlspecialchars($name);?>') 
// output: onclick="assign('&#39;12345'') 

onclick="assign('<?php echo addslashes($name);?>') 
// output: onclick="assign(''12345\'') 

onclick="assign('<?php echo htmlspecialchars(addslashes($name));?>') 
// output: onclick="assign('&#39;12345\'') 

上一個版本的作品,但我想一定有更好的方法。

回答

2

如果可能,應該使用語言識別轉義例程。 addslashes幾乎從來都不是正確的選擇。

在這種情況下,json_encode將完成這項工作,因爲JSON是描述文字的JavaScript位的子集。注意它也會添加引號來表明它是一個字符串。

一旦您確保JavaScript安全,您現有的選擇htmlspecialchars是使JavaScript安全嵌入HTML屬性值的正確選擇。

onclick="assign(<?php echo htmlspecialchars(json_encode($name));?>) 

你也可以考慮使用data-屬性來存儲數據,再結合你的事件處理程序與addEventListener

+0

@RolandStarke - 好。固定。 – Quentin

+0

這會導致'onclick ='assign('"#039; 12345'"');「>'由於雙引號而中斷。 – xylar

+0

不應該是:'onclick =「<?php echo htmlspecialchars('assign('+ json_encode($ name)+')');?>''''assign('+ json_encode($ name)+' )''爲js部分,然後'htmlspecialchars(...)'爲html部分。 –