讓我們來就是檢查你的第一個例子
onclick="alert('<?echo $row['username']?>')"
的重要組成部分,在這裏,是的<? … ?>
外一切純粹的HTML,並且從來沒有被PHP解釋器看過。因此,唯一與PHP相關的部分是<? … ?>
中的代碼,即echo $row['username']
。在這裏,一個人不需要做任何轉義。
你的第二個例子,相比之下
echo('<button type="button" id="button'.$ctr.'"onClick="showMapsInfo(\''.str_replace("'", "\\'", $maps_name).'\', \''.str_replace("'", "\\'", $ctr).'\');"><img src="img/maps_logo.gif"></button><br/>');
在PHP中,周圍沒有HTML純粹寫的。因此,你必須小心引號。讓我們從頭開始構建,看看這裏會發生什麼。當你建立這樣的事情,你可能會與
echo('<button type="button" id="button1" onClick="showMapsInfo(\'...\');"><img src="img/maps_logo.gif"></button><br/>');
啓動,因爲單引號已經作爲字符串分隔符,它們必須\'
裏面的字符串進行轉義。現在爲JavaScript函數內的部分。把就更簡單了,上面的代碼歸結爲
echo('showMapsInfo(\'...\');');
,當我們要插入一些動態部位,而不是「...」的一部分,這導致在
showMapsInfo('...');
,我們需要結束字符串與'
並將其連接在一起與.
。假設你想插入有一個變量$foobar
,那麼你可以這樣寫:
echo('showMapsInfo(\''.$foobar.'\');');
導致
showMapsInfo('<VALUE OF $foobar>');
您的例子不插入$foobar
這個字符串,而是下面的表達式:
str_replace("'", "\\'", $maps_name).'\', \''.str_replace("'", "\\'", $ctr)
其中使用str_replace
爲了再次逃避的內容,但有一點扭曲:它不逃脫對於PHP,但對於最終的Javascript!每個單引號'
在輸出中成爲一個轉義的單引號\'
,但您需要編寫\\'
,因爲反斜槓需要自行轉義,以產生反斜槓作爲輸出。
,而不是'str_replace',使用'addslashes'這裏提供一個空格:''「onClick' – hjpotter92 2012-07-07 06:15:31