我从以下php代码生成链接。链接出现在浏览器中,生成的html代码似乎很好,但链接不可点击。我已经在IE和FF中对此进行了测试,并尝试使用FireBug进行测试无效。
生成表单的代码
$uploadhtml = htmlspecialchars(json_encode("<form action='up.php' method='post'
enctype='multipart/form-data'>
<label for='file'>Filename:</label>
<input type='file' name='file' id='file'/>
<br />
<input type='hidden' name='pk' value='".$pk."'>
<input type='hidden' name='username' value='".$USERNAME."'>
<input type='submit' name='submit' value='Submit' onclick=\"setTimeout(function() {
updateByPk('Layer2', '".$pk."', '".$brand."', '".$pg."'); } ),1250);\" />
</form>"), ENT_QUOTES);
生成的html代码:
<a onclick="makewindows('"<form action='up.php' method='
post'\r\nenctype='multipart\/form-data'>\r\n<label for='
`file'>Filename:<\/label>\r\n<input type='file' name='file' id='`file'\/> \r\n<br \/>\r\n<input type='hidden' name='pk' value='
380118179930'>\r\n<input type='hidden' name='username' value='
janmaybach'>\r\n<input type='submit' name='submit' value='
Submit' onclick=\"setTimeout(function() { updateByPk('Layer2',
'380118179930', 'Ed Hardy', '1'); } ),1250);\"
\/>\r\n<\/form>"'); return false;" href="#">Upload files</a>
我猜这是一个JavaScript错误,但我不知道如何查明它?
编辑:没有ENT_QUOTES的
<a href="#" onclick="makewindows('"<form action='up.php' method='post'\r
\nenctype='multipart\/form-data'>\r\n<label for='file'>Filename:<\/label>\r\n<input
type='file' name='file' id='file'\/> \r\n<br \/>\r\n<input type='hidden' name='pk'
value='380118185183'>\r\n<input type='hidden' name='username' value='janmaybach'>\r
\n<input type='submit' name='submit' value='Submit' onclick=\"setTimeout(function()
{ updateByPk('Layer2', '380118185183', 'Ed Hardy', '1'); } ),1250);\"
\/>\r\n<\/form>"'); return false;">Upload files</a>
它仍然无法点击......,似乎所有内容都被正确引用了?
当我尝试没有htmlspecial chars时,会产生以下html输出:
<input type='submit' name='submit' value='Submit' onclick=" settimeout(function()="" {="" updatebypk(="" layer2="" 380118179930="" ed="" hardy="" ,="" 1="" );="" }="" ),1250);="">
'); return false;">Upload files</a>
答案 0 :(得分:13)
正如在对问题的评论中所说,这是绝对可怕的代码,而你正在遭受后果。主要问题是代码级别的数量:呈现Javascript的服务器代码,呈现HTML - 以及每个级别的差异转义并相互干扰。
要改善这种情况,请在表单中添加一个单独的PHP页面,并打开该页面的弹出链接 - 不需要Javascript。如果你真的想不惜一切代价避免使用那个单独的页面,至少要有在页面标题中生成表单的Javascript函数(非动态),并且链接只包含对你的变量的调用。参数。
答案 1 :(得分:1)
未引用makewindows
函数中的参数。您的报价已转义(%#39
)。将其替换为'
即可。
答案 2 :(得分:1)
您的ENT_QUOTES标志正在搞砸输出。如果你仔细观察,你会发现HTML输出中没有实际的引号 - 只是转义实体。进行不使用htmlspecialchars()的测试。您应该使用反斜杠转义引号,或者更好地仍然不加引用地添加javascript功能。 jQuery可以帮助您实现http://jquery.com