我有一個頁面在另一個頁面內部放置。子頁面通過使用sendMessage()函數與父頁面進行通信。父頁面對從子頁面接收到的消息運行eval()。如何使用引號連接PHP和JavaScript字符串以正確評估
這是構建信息代碼:
var msg_string = '$("body").append("<?php echo $content; ?>")';
var send_string = "sendMessage(\'" + msg_string + "\', '<?php echo $receiver_domain; ?>')";
setTimeout(send_string, <?php echo $delay; ?>);
除了其他方面的問題是,$內容變量包含HTML和東西雙引號例如像id =「測試」不玩好所有這些連接。試圖弄清楚這一點,我感到很茫然。
我已經嘗試將$ content中的引號轉換爲",但導致瀏覽器將div id放在雙引號中(「」test「」)。
** **更新
使用json_encode方法做工作,爲獲取數據到父頁面。這比我一直在做的事情要容易得多(我已經完成了這麼多工作,但認爲有些不對勁)。也就是說,如果div id =「test」中有雙引號,則數據的評估仍然失敗。一串只是「測試」的作品,但它實際上使「測試」逐字。這是使用json方法後html中的javascript源代碼:
var msg_string = '$("body").append("<div class=\\\"test\\\">HEY WHATS UP<\/div>");';
var send_string = "sendMessage(\'" + msg_string + "\', 'http://domain.com')";
setTimeout(send_string,500);
這在eval時失敗。提示警告,以取代eval產量:
$("body").append("<div class="test">HEY WHATS UP</div>");
任何想法?
**更新2 **
所以我最終明白了這一點。這是以下三個答案的組合。 json回答給我留下了深刻的印象。基本上,雙引號需要反斜槓,以便在進入eval時,所有內容都可以正確讀取。
我遇到了一些其他的問題,包括html中的/ r/n字符......我用str_replace刪除了一個撇號...這是一個內部html元素...我用適當的html實體和BAM!
下面是代碼:
function escapeQuotes(string){
var quotes_regex = new RegExp("\"", "g");
return string.replace(quotes_regex, "\\\"");
}
var msg_string = '$("body").append(<?php echo json_encode(str_replace("\r\n", '', $content)); ?>);';
var send_string = "sendMessage(\'" + escapeQuotes(msg_string) + "\', '<?php echo $receiver_domain; ?>')";
setTimeout(send_string,<?php echo $delay; ?>);
我upvoted每個人的答案,因爲我用的一切位。非常感謝!
你可以Base64編碼,它逃脫 - 這是醜陋的,但它會工作。 – jimw 2012-04-14 02:26:24
Ahhhh,PHP字符串混合的日子(不是那麼好)。我只是將整個網站從PHP轉換爲python,無法相信我最終刪除了多少個轉義字符。 – 2012-04-14 02:30:27