使用PHP动态创建Javascript的更简单方法

6
我可以帮您翻译成中文。这段内容涉及编程,目前正在使用PHP动态创建一个JavaScript代码块,并在页面上输出。以下是示例代码:
$JS .= '<script>';

if($condition == true) {
    $JS .= 'alert("Yo its true omg!");
}

$JS .= "</script>";

正如您所看到的,这将随着所有单引号'和双引号内转义的单引号而变得混乱...

有更好的方法吗?


4
好的,一种更好的方式是不要这样做。 - Gregg
1
我这么做是因为我需要为从MySQL数据库检索到的X个结果创建X块JS代码。每个结果将创建自己的div id,例如<div id="marker_1"><div id="marker_2">等等... - Nyxynyxx
5个回答

11

你需要使用heredoc语法!

if($condition)
    $statement = <<<JS
        alert("Wohoo!");
JS;
else $statement = "";

$javascript = <<<JS
    <script>
        $statement
    </script>
JS;

为了处理heredoc字符串中的条件语句,只需事先执行条件逻辑,并在heredoc字符串中插入空字符串或填充字符串。您可以像处理普通字符串一样将变量插入到heredoc字符串中。

如果您认为定义heredoc字符串很麻烦,我也同意您的看法。不幸的是,据我所知,这是避免更大的引号转义麻烦的唯一方法(无恶意)。


1
Heredoc 要求在开始标记后的第一行必须位于下一行的最左边。 - Alex
能否使用PHP的if()条件语句或其他PHP代码? - Nyxynyxx
Alex:不需要。它所要求的仅仅是闭合标签单独在一行上,没有空格,并且开放标签位于其行的最右边。 - Hubro
请注意,如果您要从PHP导出值到Javascript,则可能需要使用json_encode()addslashes() - user212218

5
您最好将动态JavaScript文件仍然作为具有PHP扩展名的单独文件创建,然后在输出JavaScript之前设置标题内容类型为text/javascript。
$js = <<<JS
// Your JS here
JS;

header("Content-type: text/javascript");
echo $js;
exit();

1
如果静态的 JavaScript 代码量比动态创建的 JavaScript 代码量多,你可以像往常一样编写 JavaScript 代码,然后在需要的地方插入 PHP 代码。
一个假想的 index.php 的例子:
<?php

    $message = "Yo its true omg!";

?>

<html><head>

    <script>
        alert("<?php echo $message; ?>");
    </script>

</head><body>

    ...

</body></html>

1
创建一个PHP文件,但使用内容头使其“看起来”像JS文件对浏览器。因为文件扩展名是.php,Apache(或其他任何Web服务器)仍将解析它,但浏览器将其视为JS文件并正确运行其内容。我经常使用这种方法来处理CSS文件,因为它允许我声明变量并利用循环和其他更强大的控制概念,这些概念在CSS中缺乏。

0
echo <<<EOF
 <script>
      alert("Yo it's true omg!");
 </script>

EOF;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接