如何使用引号连接PHP和JavaScript字符串以进行正确评估
作者:互联网
我有一页iframed在另一页内.子页面使用sendMessage()函数与父页面通信.父页面对从子页面接收的消息运行eval().
这是构造消息的代码:
var msg_string = '$("body").append("<?php echo $content; ?>")';
var send_string = "sendMessage(\'" + msg_string + "\', '<?php echo $receiver_domain; ?>')";
setTimeout(send_string, <?php echo $delay; ?>);
其他问题是$content变量包含HTML,而id =“test”之类的双引号在所有这些连接中都不能很好地发挥作用.我无法想象这一点.
我已经尝试通过将它们转换为“内容来逃避$content中的引号”但是这导致浏览器将div id放在双引号中(“”test“”).
**更新**
使用json_encode方法可以将数据传输到父页面.这是一个比我一直做的更容易的解决方案(我已经完成了这么多但是发现了一些不对劲的事情).也就是说,如果div id =“test”中有双引号,则数据的eval仍然会失败.一串只是“测试”的工作,但它实际上逐字地“测试”.这是使用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; ?>);
因为我使用了所有东西,所以我赞成了每个人的答案.非常感谢!
解决方法:
JSON是你的朋友.
var msg_string = '$("body").append(<?php echo json_encode($content); ?>)';
标签:javascript,php,eval,string-concatenation 来源: https://codeday.me/bug/20190726/1539233.html