1

我有一个变量,其中保存了完整的 html。$body= $myhtmlpage;

<a onclick="openWin(' <?php echo htmlspecialchars(json_encode($body)) ?>');" href="javascript:void(0);"> Click </a>

我有这个 javascript 函数,它在新窗口中显示文本。

 <script type="text/javascript">
function openWin( str )
{
myWindow=window.open('','','width=400,height=400');
myWindow.document.write(str+"<p>This is 'myWindow'</p>");
myWindow.focus();
}
</script>

当我的身体里有简单的文字时,它工作得很好。但如果有一些 html 则不会显示,我是 javascript 新手。请告诉我如何准备我的 HTML 以将其传递给 Javascript html。我尝试htmlspecialchars(json_encode($body)) 了功能,但仍然有问题。

Uncaught SyntaxError: Unexpected identifier 
4

4 回答 4

3

你将经历一场漫长的战斗,试图让大量的 HTML 在 Javascript 中作为字符串变量工作。最好将该标记放在标记中的隐藏块(如 DIV)中,然后获取该标记的内容并将其显示在您的窗口中。

这具有允许验证隐藏标记的额外优势。调试大量填充到字符串变量中的 html 标记非常困难,但是当将其作为真正的标记包含在 DOM 中时,它会让您的生活变得更加轻松。

更新:添加一些示例代码:

<div id="my_hidden_content" style="display:none;">
<?php echo $body; ?>
</div>

<a onclick="openWin('my_hidden_content');" href="javascript:void(0);"> Click </a>

现在的javascript:

function openWin( contentId )
{
    var contentContainer = document.getElementById(contentId);
    var content = contentContainer.innerHTML;
    myWindow=window.open('','','width=400,height=400');
    myWindow.document.write(content+"<p>This is 'myWindow'</p>");
    myWindow.focus();
}
于 2012-05-21T10:12:37.907 回答
2

首先,您不需要使用json_encode(),这只会使情况混乱。

其次,问题在于您的 HTML 包含引号。这将导致您输出的 HTML 出现语法错误,因为htmlspecialchars()不会转义引号。

htmlentities()ENT_QUOTES标志一起使用。因此,将行更改为:

<a onclick="openWin('<?php echo htmlentities($body, ENT_QUOTES) ?>');" href="javascript:void(0);">Click</a>

第三(虽然它可能应该是第一,因为它是最重要的一点)你的方法都是错误的。如果您打开一个新窗口,您应该让它从服务器加载一个页面并在窗口打开时生成 HTML。

于 2012-05-21T10:12:39.240 回答
1

您可以在 php 代码中尝试 html 代码,而不是 html 中的 php 代码。例如

<?php
echo "<a onclick='openWin(\" ".htmlspecialchars(json_encode($body))." \")'>Click</a>";
?>
于 2012-05-21T10:20:01.040 回答
0

那是因为,HTML 不是 JSON。为此,只需使用:htmlspecialchars($body)

于 2012-05-21T10:11:22.953 回答