所以,我想在特定条件到达时在页面中插入一个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>';
答案 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
}