2013-05-04 72 views
0

我使用這個PHP代碼PHP:故障組成的字符串

echo " onclick='myFunction(" . $row['username'] . ")'" 

,讓我這個結果

onclick="myFunction(Francis88)" 

但我想這一點:

onclick="myFunction('Francis88')" 

我應該如何改變我的PHP代碼獲取此?

+0

請停止在HTML中附加事件監聽器。 – 2013-05-04 17:22:05

+0

爲什麼我應該這樣做? – GVillani82 2013-05-04 17:23:20

+0

因爲您正在將HTML與JavaScript混合在一起。這最終成爲一個難以維繫的混亂。 [這](http://jsfiddle.net/teresko/KfBvt/)例子應該提供一個更好的方法的簡單說明。谷歌「事件代表」或「事件冒泡」瞭解更多信息。 – 2013-05-04 17:25:30

回答

3

使用\到字符串中轉義字符,因此,例如:

echo " onclick=\"myFunction('" . $row['username'] . "')\"" 
+1

這並不能緩解XSS攻擊。 – 2013-05-04 16:59:12

2

我會用json_encode()此,以確保它不會亂用的名稱,如奧賴利;然後,應用htmlspecialchars()以確保得到的字符串中的HTML不會導致問題的屬性:

printf(' onclick="myFunction(%s)"', 
    htmlspecialchars(json_encode($row['username']), ENT_QUOTES, 'UTF-8') 
); 

我還使用單引號這裏,使HTML屬性值可以用雙引號括起來;可爭論的,但我討厭單引號的屬性;-)

另請參閱我的previous answer找出使用內嵌JavaScript的缺點。

+1

'echo sprintf' - >'printf' :)您還應該對數據進行HTML編碼。 – deceze 2013-05-04 16:59:21

+0

@deceze好點!修正:) – 2013-05-04 17:05:08