编程语言
首页 > 编程语言> > 如何使用引号连接PHP和JavaScript字符串以进行正确评估

如何使用引号连接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