Javascript SyntaxError:意外令牌:使用php的echo执行javascript代码时的标识符

时间:2018-04-03 13:24:13

标签: javascript php html

所以,我想在特定条件到达时在页面中插入一个div。 我正在检查PHP中的条件,如:

if ($var == 0) {
    echo '<script>console.log("Test.");
    var res = document.getElementById("response");
    res.innerHTML = "<div class="hello">hi</div>";</script>';
}

所以,我认为单引号和双引号是相互混合的,它在这段代码上给出了SyntaxError

echo '<script>res.innerHTML = "<div class="hello">hi</div>"</script>';

我试着写

res.innerHTML = "<div class='hello'>hi</div>";

然后代码不起作用,因为我在php的回声中使用它,我正在使用单引号('')。

我的基本目标是在条件满足时在代码中添加一个类。我正在检查PHP中的条件。 你可以告诉我如何避免出现这个错误,因为以下工作正常。

echo '<script>res.innerHTML = "<div>hi</div>"</script>';

2 个答案:

答案 0 :(得分:5)

简答

您需要转义html字符串中的嵌套引号:

res.innerHTML = "<div class=\\"hello\\">hi</div>";</script>'

你需要双斜杠,因为你还需要转义PHP字符串中的斜杠。

完整示例:

if ($var == 0) {
    echo '<script>console.log("Test."); var res = document.getElementById("response"); res.innerHTML = "<div class=\\"hello\\">hi</div>";</script>';
}

更长的答案

对问题的更详细解释......

如果您回复确切的脚本,您将获得以下javascript:

console.log("Test.");
var res = document.getElementById("response");
res.innerHTML = "<div class="hello">hi</div>";

正如您将发现的那样,第3行无效,因为您需要转义HTML中的内部引号。通常,您可以使用单引号和双引号组合在JavaScript中执行此操作,但是您已经在使用PHP的单引号。所以你需要绕过hello附近的引号。

您的目标应该是生成以下JavaScript:

console.log("Test.");
var res = document.getElementById("response");
res.innerHTML = "<div class=\"hello\">hi</div>";

我可以在开始时提出建议。

当然,如果您愿意,可以改为使用单引号:

res.innerHTML = \'<div class="hello">hi</div>\';</script>'

答案 1 :(得分:2)

我会关闭PHP模式,编写JavaScript然后再次进入PHP模式。这种方式更清晰,更不容易出错:

if ($var == 0) {
?>
    <script>
        console.log("Test.");
        var res = document.getElementById("response");
        res.innerHTML = '<div class="hello">hi</div>';
    </script>
<?php
}

如果你需要在生成的JavaScript中使用存储在PHP变量中的值,这种格式会让一切变得简单(而不是将脚本构建成需要大量转义的PHP字符串):

$message = 'hi';
if ($var == 0) {
?>
    <script>
        console.log("Test.");
        var res = document.getElementById("response");
        res.innerHTML = '<div class="hello"><?php echo(addslashes($message)); ?></div>';
    </script>
<?php
}

需要使用addslashes()来正确编码$message的值,因为它用于生成JavaScript string

更新

正如我在评论中与@ roland-starke的讨论所揭示的那样,addcslashes()的更好替代方案是json_encode()。请注意,给定一个PHP字符串,json_encode()会生成一个完整的JavaScript字符串,包括用它组成的双引号。

使用json_encode(),上面的代码变为:

$message = 'hi';
if ($var == 0) {
?>
    <script>
        console.log("Test.");
        var res = document.getElementById("response");
        res.innerHTML = '<div class="hello">' +
                        <?php echo(json_encode($message)); ?> +
                        '</div>';
    </script>
<?php
}