Php 在另一个字符串中展开带引号的字符串

Php 在另一个字符串中展开带引号的字符串,php,javascript,Php,Javascript,我有两个变量包含一些html代码,另一个变量包含html表单的代码。我试图在第二秒内展开一个字符串,将其作为参数传递给函数,但是这会导致一些错误 我的make弹出功能非常简单: function popup(htmlcode){ child1 = window.open ("about:blank"); child1.document.write(htmlcode); child1.document.close(); } 使用上述函数的代码 <?php $blah = "<h1&

我有两个变量包含一些html代码,另一个变量包含html表单的代码。我试图在第二秒内展开一个字符串,将其作为参数传递给函数,但是这会导致一些错误

我的make弹出功能非常简单:

function popup(htmlcode){
child1 = window.open ("about:blank");
child1.document.write(htmlcode);
child1.document.close(); 
}
使用上述函数的代码

<?php
$blah = "<h1>Well</h1>"; $test = "<h2>Done</h2>";
echo '<script type="text/javascript" src="fetchlayers.js"></script>';
$formcode = "<form action=\"process.php\" method=\"post\" enctype=\"multipart/form-data \">
<label for=\"file\">Filename:</label>
<input type=\"file\" name=\"file\" id=\"file\"/> 
<br />
<input type=\"submit\" name=\"submit\" value=\"Submit\" onclick=\"setTimeout(function() { sendInfo(\"".$blah."\", \"".$test."\"); } ),1250);\" />
</form>";

echo "<h1>hello</h1>
<div id='form'>
<a href='#' onclick=\"popup('" . htmlentities($formcode) . "'); return false;\">
click here</a>
</div>";

必须通过执行以下操作来转义回车(\n)

$formcode = str_replace("\n", "\\n", $formcode);
您还必须转义引号

$formcode = str_replace("'", "\\'", $formcode);
您可以将这两行合并为一行:

$formcode = str_replace(array("\n", "'"), array("\\n", "\\'"), $formcode);

更好的方法是打开一个已经包含表单代码的HTML或PHP页面,而不是打开
about:blank
并动态传递它


您没有理由将HTML传递到Javascript函数中,这样就可以直接将其写入文档。

如果您必须保持弹出函数的原样,我在to“”的帮助下找到了一个解决方案

HTML隐藏代码:

<div style="display:none;" id="process">
<form action="process.php" method="post" enctype="multipart/form-data ">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/> 
<br />
<input id="submit" type="submit" name="submit" value="Submit" onclick="setTimeout(function() { sendInfo('{param1}', '{param2}'); } ), 1250);" />
</form>
</div>

文件名:

带有json的HTML链接:

<a href="#" onclick="popup('process', {'{param1}':'<h1>Well</h1>', '{param2}':'<h2>Done</h2>'}); return false;">
click here</a>

提交按钮有一个额外的
,它过早地关闭了设置超时功能。具体位置在内部:

} ),1250
您可能还应该考虑在php字符串中使用单引号,以使其更易于阅读。因为使用双引号,所以不必打断字符串来插入变量$blah和$test的内容

像这样的方法应该会奏效:

$formcode = "...
<input type='submit' name='submit' value='Submit' 
onclick='setTimeout(function() { sendInfo(\"$blah\", \"$test\"); },1250);' />
...
我将sendInfo行更改为以下行,运行了它,看起来它正在工作。此处将转义单引号,以避免过早关闭对popup()的调用


你的网页可以公开访问吗?URL是什么?函数的第3行您使用
html
作为变量名,但您正在传递
htmlcode
,这只是一个输入错误吗?是的,只是一个输入错误,已修复。我的页面不是公共的,只是本地的。如果有超过20个变量呢?为什么要使用双斜杠?为什么我需要逃避引用?回车在哪里?为什么我必须转义它们?我仍然得到一个未终止的字符串侧向。我的函数弹出功能被网站的太多其他部分依赖,我宁愿理解我相对简单的代码的确切问题是什么。啊,我仍然得到一个未终止的字符串侧向,尝试你所说的。我停止了绳子的断裂,我去掉了多余的部分)。
<a href="#" onclick="popup('process', {'{param1}':'<h1>Well</h1>', '{param2}':'<h2>Done</h2>'}); return false;">
click here</a>
} ),1250
$formcode = "...
<input type='submit' name='submit' value='Submit' 
onclick='setTimeout(function() { sendInfo(\"$blah\", \"$test\"); },1250);' />
...
onclick=\"setTimeout(function() { sendInfo(\"
sendInfo(\'".$blah."\', \'".$test."\');