gpt4 book ai didi

javascript - 从 PHP 调用 javascript 函数 - 引号问题

转载 作者:行者123 更新时间:2023-11-29 21:46:15 25 4
gpt4 key购买 nike

我正在尝试从 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

我觉得参数两边应该有引号,但是我加不上。我尝试使用 '\"' 但没有成功。有什么想法吗?

最佳答案

您需要引用并正确转义分配给输入的 JavaScript 字符串 value属性(property)。您可以使用 json_encode 为此:

echo "<a onclick='document.folderForm.folderLocation.value=".htmlspecialchars(json_encode($line)) .";' href='#'>".htmlspecialchars($line) . "</a><br />";

Demo


问题的主要原因是您的代码缺少字符串值周围的引号,因此 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 } ?>

Demo

注意:自 PHP 5.4 起,PHP 短回显标记随处可用,与配置无关。开关<?=<?php echo如果您需要支持 PHP < 5.4。

关于javascript - 从 PHP 调用 javascript 函数 - 引号问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31091988/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com