【问题标题】:How to output JavaScript with PHP如何用 PHP 输出 JavaScript
【发布时间】:2009-07-22 09:36:52
【问题描述】:

我是 PHP 新手。我需要用 PHP 输出以下 JavaScript。这是我的代码:

<html>
<body>
<?php

echo "<script type="text/javascript">";
echo "document.write("Hello World!")";
echo "</script>";

?>
</body>
</html>

但它显示错误:

解析错误:语法错误,意外的 T_STRING,需要 ',' 或 ';'在 /var/www/html/workbench/person/script.php 第 4 行

有人可以帮忙吗?我还需要一些关于如何在应用程序中使用 PHP、HTML 和 JavaScript 的简单教程。

【问题讨论】:

  • 哦,太好了,有人通过编辑它“增强”了问题中的原始代码......现在我的答案看起来很垃圾。 :P

标签: php


【解决方案1】:

您应该转义 PHP 字符串中的 JavaScript 字符串分隔符。您对 PHP 和 JavaScript 字符串都使用双引号。试试这样吧:

<html>
<body>
<?php

// Here, we use single quotes for PHP and double quotes for JavaScript
echo '<script type="text/javascript">';
echo 'document.write("Hello World!")';
echo '</script>';

?>
</body>
</html>

当字符串分隔符与引号相同时,您必须在 JavaScript 和 PHP 上转义引号:

echo "\""; // escape is done using a backslash
echo '\'';

在 JavaScript 中也一样:

alert("\""); // escape is done using a backslash
alert(echo '\'');

但是因为这样的转义序列很难读取字符串,所以最好根据需要将单引号和双引号组合起来:

echo '"';
echo "'";

【讨论】:

  • 是时候给这个答案一个正确的了!投票。来吧@krishna,这是值得的。这家伙为你腾出时间。我认为 3 年的时间足以解决这个问题。
  • 我可以建议将// PHP uses single quotes, JavaScript uses double quotes 更改为// Here, we use single quotes for PHP and double quotes for JavaScript 吗?这样就更清楚这些不是关于 PHP 和 JavaScript 的规则
  • 我发现这个答案真的很有帮助。非常感谢!
【解决方案2】:

如果您需要转义引号,则会出现错误(就像其他答案所说)

为避免这种情况,您可以为字符串声明使用另一种语法,称为“Heredoc

使用这种语法,您可以声明一个长字符串,甚至包含单引号和/或双引号,而不必转义这些;它会让你的 Javascript 代码更容易编写、修改和理解——这总是一件好事。

例如,您的代码可能变成:

$str = <<<MY_MARKER
<script type="text/javascript">
  document.write("Hello World!");
</script>
MY_MARKER;

echo $str;

请注意,使用 Heredoc 语法(如用双引号分隔的字符串),变量是插值的。

【讨论】:

  • +1 用于使用 HEREDOC,这是处理大型代码块的更好方法。
  • +1。同意,如果您包含大型代码块,请使用 heredoc。
【解决方案3】:

另一种选择是这样做:

<html>
    <body>
    <?php
    //...php code...  
    ?>
    <script type="text/javascript">
        document.write("Hello World!");
    </script>
    <?php
    //....php code...
    ?>
    </body>
</html>

如果您想在 JavaScript 中使用 PHP,请这样做:

<html>
    <body>
    <?php
        $text = "Hello World!";
    ?>
    <script type="text/javascript">
        document.write("<?php echo $text ?>");
    </script>
    <?php
    //....php code...
    ?>
    </body>
</html>

希望这能有所帮助。

【讨论】:

  • +1 - 这是一个最佳实践,因为它使 HTML 易于编辑,并清楚地显示了 PHP 和 HTML 之间的界限。
  • 到目前为止,该解决方案带来的麻烦和潜在的混乱最少。
【解决方案4】:

更简单的方法是使用 PHP 的 heredoc 语法。一个例子:

<?php

echo <<<EOF
<script type="text/javascript">
    document.write("Hello World!");
</script>
EOF;

?>

【讨论】:

    【解决方案5】:

    你需要转义你的引号。

    你可以这样做:

    echo "<script type=\"text/javascript\">";
    

    或者这个:

    echo "<script type='text/javascript'>";
    

    或者这个:

    echo '<script type="text/javascript">';
    

    或者干脆远离php

    <script type="text/javascript">
    

    【讨论】:

      【解决方案6】:

      你需要像这样转义双引号:

      echo "<script type=\"text/javascript\">";
      echo "document.write(\"Hello World!\")";
      echo "</script>";
      

      或在双引号内使用单引号,如下所示:

      echo "<script type='text/javascript'>";
      echo "document.write('Hello World!')";
      echo "</script>";
      

      或者反过来,像这样:

      echo '<script type="text/javascript">';
      echo 'document.write("Hello World!")';
      echo '</script>';
      

      另外,请查看PHP Manual 了解有关字符串的更多信息。

      另外,为什么要使用 PHP 打印 JavaScript?我觉得你的设计有问题。

      【讨论】:

        【解决方案7】:

        以下解决方案应该非常适合您尝试做的事情。

        1. JavaScript 块放置在文档中的很晚,因此您不必 担心元素不存在。

        2. 您在脚本顶部设置了一个 PHP 变量并仅输出 JavaScript 块中变量的值。

          这样,您不必担心转义双引号或 HEREDOCS (如果您真的必须去那里,这是推荐的方法)。

          Javascript 嵌入示例

          <div id="helloContainer"><div>
          
          <script type="text/javascript">
              document.getElementById('helloContainer').innerHTML = '<?= $greeting; ?>';
          </script>
          

        【讨论】:

          【解决方案8】:

          你想这样做:

          <html>
          <body>
          <?php
          
          print '
          <script type="text/javascript">
          document.write("Hello World!")
          </script>
          ';
          
          ?>
          </body>
          </html>
          

          【讨论】:

            【解决方案9】:

            相反,您可以轻松做到这一点:

            <html>
            <body>
            <script type="text/javascript">
            <?php
              $myVar = "hello";
            ?>
               document.write("<?php echo $myVar ?>");
            </script>
            </body>
            

            【讨论】:

              【解决方案10】:

              您使用的是 " 而不是 ' 它正在将 php 语法与 javascript 混淆。PHP 将使用 echo 函数打印 javascript,但它将 js 代码视为错误的 php 语法。所以试试这个,

              <html>
              <body>
              <?php
              
              echo "<script type='text/javascript'>";
              echo "document.write('Hello World!')";
              echo "</script>";
              
              ?>
              </body>
              </html>
              

              【讨论】:

                【解决方案11】:
                <?php
                
                echo '<script type="text/javascript">document.write(\'Hello world\');</script>';
                ?>
                

                【讨论】:

                  【解决方案12】:

                  试试这个:

                  <html>
                  <body>
                  <?php
                  
                  echo "<script type="text/javascript">";
                  echo "document.write("Hello World!");";
                  echo "</script>";
                  
                  ?>
                  </body>
                  </html>
                  

                  【讨论】:

                  • 这与原始问题中的代码不起作用的原因相同(您甚至更改了代码上的任何内容吗?)
                  • @Developer 请不要通过编辑来纠正编程错误。相反,留下评论以通知作者他们的答案的不足之处。
                  • 好酷。抱歉,想通过更正此代码来保存一些代码:(
                  猜你喜欢
                  • 1970-01-01
                  • 2011-05-15
                  • 1970-01-01
                  • 2018-01-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多