我使用這個PHP代碼PHP:故障組成的字符串
echo " onclick='myFunction(" . $row['username'] . ")'"
,讓我這個結果
onclick="myFunction(Francis88)"
但我想這一點:
onclick="myFunction('Francis88')"
我應該如何改變我的PHP代碼獲取此?
我使用這個PHP代碼PHP:故障組成的字符串
echo " onclick='myFunction(" . $row['username'] . ")'"
,讓我這個結果
onclick="myFunction(Francis88)"
但我想這一點:
onclick="myFunction('Francis88')"
我應該如何改變我的PHP代碼獲取此?
使用\
到字符串中轉義字符,因此,例如:
echo " onclick=\"myFunction('" . $row['username'] . "')\""
這並不能緩解XSS攻擊。 – 2013-05-04 16:59:12
我會用json_encode()
此,以確保它不會亂用的名稱,如奧賴利;然後,應用htmlspecialchars()
以確保得到的字符串中的HTML不會導致問題的屬性:
printf(' onclick="myFunction(%s)"',
htmlspecialchars(json_encode($row['username']), ENT_QUOTES, 'UTF-8')
);
我還使用單引號這裏,使HTML屬性值可以用雙引號括起來;可爭論的,但我討厭單引號的屬性;-)
另請參閱我的previous answer找出使用內嵌JavaScript的缺點。
'echo sprintf' - >'printf' :)您還應該對數據進行HTML編碼。 – deceze 2013-05-04 16:59:21
@deceze好點!修正:) – 2013-05-04 17:05:08
請停止在HTML中附加事件監聽器。 – 2013-05-04 17:22:05
爲什麼我應該這樣做? – GVillani82 2013-05-04 17:23:20
因爲您正在將HTML與JavaScript混合在一起。這最終成爲一個難以維繫的混亂。 [這](http://jsfiddle.net/teresko/KfBvt/)例子應該提供一個更好的方法的簡單說明。谷歌「事件代表」或「事件冒泡」瞭解更多信息。 – 2013-05-04 17:25:30