我目前正在使用PHP在页面上动态创建一个echoed
的javascript。
示例代码:
$JS .= '<script>';
if($condition == true) {
$JS .= 'alert("Yo its true omg!");
}
$JS .= "</script>";
正如你所看到的,这最终会变得混乱'
引号和双引号中单引号的转义......
有更好的方法吗?
答案 0 :(得分:10)
您需要heredoc语法!
if($condition)
$statement = <<<JS
alert("Wohoo!");
JS;
else $statement = "";
$javascript = <<<JS
<script>
$statement
</script>
JS;
要处理heredoc字符串中的条件语句,只需预先执行条件逻辑,并在heredoc字符串中插入空字符串或填充字符串。您可以像使用普通字符串一样将变量插入到heredoc字符串中。
如果您认为heredoc字符串很难定义,我同意您的看法。不幸的是,据我所知,这是逃避更大报价逃避麻烦的唯一途径(没有双关语意)。
答案 1 :(得分:5)
你最好还是使用PHP扩展创建动态javascript文件作为单独的文件然后在输出javascript之前将标题内容类型设置为text / javascript
$js = <<<JS
// Your JS here
JS;
header("Content-type: text/javascript");
echo $js;
exit();
答案 2 :(得分:1)
创建一个PHP文件,但使用内容标题使其“看起来”像浏览器的JS文件。因为文件扩展名是.php Apache(或者你正在使用的任何其他Web服务器)仍然会解析它,但浏览器会将其视为JS文件并正确运行内容。我经常将它用于CSS文件,因为它允许我声明变量并利用循环和CSS缺乏的其他更强大的控制概念。
答案 3 :(得分:0)
echo <<<EOF
<script>
alert("Yo it's true omg!");
</script>
EOF;
答案 4 :(得分:0)
将您的javascript分成文件:
文件名:'javascript1.js'包含:
alert(1);
文件名:'javascript2.js'包含:
alert(2);
文件名:'javascript3.js'包含:
alert(3);
确保它们可以正确连接。
然后是php:
$final_output = file_get_contents('javascript1.js');
if ($condition) {
$final_output .= file_get_contents('javascript2.js');
}
$final_output .= file_get_contents('javascript3.js');
echo $final_output;
答案 5 :(得分:0)
如果静态javscript代码量大于你的dinamically创建的javascript代码量,你可以像往常一样编写javascript代码,然后在需要的时候注入php。
假设index.php的例子:
<?php
$message = "Yo its true omg!";
?>
<html><head>
<script>
alert("<?php echo $message; ?>");
</script>
</head><body>
...
</body></html>