我正在尝试从PHP调用javascript函数。我们的想法是从文件中创建每个参数作为链接,点击时将其输入文本框。
$lines = file('http://localhost/repositories.txt');
foreach ($lines as $line_num => $line) {
echo "<a onclick='javascript:(document.folderForm.folderLocation.value=".htmlspecialchars($line) .");' href='#'>".htmlspecialchars($line) . "</a><br />";
}
点击我正在创建的链接时(例如):
ReferenceError: test2 is not defined
我认为参数周围应该有引号,但我无法添加它们。我尝试使用'\''但没有成功。 任何想法?
答案 0 :(得分:2)
您需要引用并正确转义您分配给输入value
属性的JavaScript字符串。您可以使用json_encode
:
echo "<a onclick='document.folderForm.folderLocation.value=".htmlspecialchars(json_encode($line)) .";' href='#'>".htmlspecialchars($line) . "</a><br />";
问题的主要原因是您的代码缺少字符串值周围的引号,因此JavaScript将其解释为标识符(变量名称)。
json_encode
在值周围添加引号,更重要的是,转义值以确保它是有效的JSON字符串(它会转义换行符,回车符和引号,否则很容易导致语法错误)
JSON是JavaScript语法的子集,因此任何有效的JSON都是有效的JavaScript。 (只要在合适的背景下使用)
最后,由于值在HTML属性中,因此仍然应用htmlspecialchars
来转义值。它会转义引号以确保变量值不会超出属性值,并且还会将&
之类的字符转义为不被解释为HTML实体序列的开头。
最后,我建议在这种情况下反对echo
,以减少引号数量并使插值更容易阅读:
$lines = file('http://localhost/repositories.txt');
foreach ($lines as $line_num => $line) { ?>
<a onclick='document.folderForm.folderLocation.value=<?= htmlspecialchars(json_encode($line)) ?>;' href='#'><?= htmlspecialchars($line) ?></a><br />
<?php } ?>
注意:从PHP 5.4开始,PHP的短回声标记随处可用,与配置无关。如果您需要支持PHP,请将<?=
切换为<?php echo
。 5.4。