【问题标题】:How to put php inside JavaScript?如何将 php 放入 JavaScript 中?
【发布时间】:2011-03-21 16:50:39
【问题描述】:

我试过了(但没用):

<?php  
  $htmlString= 'testing';
?>
<html>
  <body>
    <script type="text/javascript">  
      var htmlString=<?php echo $htmlString; ?>;
      alert(htmlString);
    </script>
  </body>
</html>

这是我为此目的使用的tutorial

【问题讨论】:

    标签: php javascript


    【解决方案1】:

    试试这个:

    <?php $htmlString= 'testing'; ?>
    <html>
      <body>
        <script type="text/javascript">  
          // notice the quotes around the ?php tag         
          var htmlString="<?php echo $htmlString; ?>";
          alert(htmlString);
        </script>
      </body>
    </html>
    

    当您遇到此类问题时,一个好主意是检查您的浏览器是否存在 JavaScript 错误。不同的浏览器有不同的显示方式,但请寻找 javascript 控制台或类似的东西。此外,请检查浏览器查看的页面来源。

    有时初学者会对字符串中的引号感到困惑:在 PHP 部分,您将 'testing' 分配给了 $htmlString。这会在该变量中放置一个字符串值,但该值中没有引号:它们仅用于解释器,所以他知道:哦,现在是字符串文字

    【讨论】:

    • @inf3rno,如果有问题,我们应该修复它!不能在这里给出错误的答案......到底是什么问题? (我假设你反对最后一段......嗯......有点难以向初学者解释 - 你有更好的看法吗?)
    • @inf3rno,哦...我刚刚看到你自己的答案。嗯……你说得有道理……除了,我认为对于级别 OP 是 ATM,它有点 TMI。他似乎还没有完全理解一些基本的东西。
    • 这很容易解释,如果你想将字符串注入到javascript代码中,你必须为javascript转义它......json_encode就是这样做的......它与sql注入预防非常相似,在那里你必须为 sql 逃跑...
    • 当php变量包含'标记时出错。像“人的”
    • 这仍然有效并且这安全吗?
    【解决方案2】:

    你的字符串周围缺少引号:

    ...
    var htmlString="<?php echo $htmlString; ?>";
    ...
    

    【讨论】:

    • $htmlString = "\"" 呵呵,不知道为什么那个JavaScript突然停止工作了...
    【解决方案3】:

    如果您使用 .js 文件,上述所有解释均无效。如果您想将 PHP 解析为 .js 文件,则必须使用以下命令修改 .js 文件所在的 .htaccess,从而在服务器上进行更改:

    <FilesMatch "\.(js)$">
        AddHandler application/x-httpd-php .js
    </FilesMatch>
    

    然后,包含以下代码的文件 test.js 将在客户端执行 .JS 并在服务器端执行解析的 PHP:

    <html>
    <head>
    <script>
    function myFunction(){
       alert("Hello World!");
    }
    </script>
    </head>
    <body>
    <button onclick="myFunction()"><?php echo "My button";?></button>
    </body>
    </html>
    

    【讨论】:

      【解决方案4】:

      将服务器端数据放入生成的 javascript 代码的唯一正确方法:

      <?php $jsString= 'testing'; ?>
      <html>
        <body>
          <script type="text/javascript">      
            var jsStringFromPhp=<?php echo json_encode($jsString); ?>;
            alert(jsStringFromPhp);
          </script>
        </body>
      </html>
      

      使用简单的引号,您的变量内容不会针对 HTML 和 javascript 进行转义,因此容易受到 XSS 攻击...

      出于类似的原因,我建议使用document.createTextNode() 而不是设置innerHTML。办公室。它更慢,但更安全......

      【讨论】:

      • 从技术上讲,这不是唯一的方式,但它肯定是一种安全的方式。也就是说,一开始就不应该用 PHP 构建 JavaScript。
      • 这取决于您要发送什么样的数据。 html unicode 字符与 javascript unicode 字符不同,因此您必须对其进行转换...使用 REST 服务和适当的客户端库来处理请求的另一种方法,例如 extjs 或骨干网。顺便提一句。在这种情况下你也必须使用 json_encode...
      【解决方案5】:

      你需要在 javascript 中为字符串加上引号

      var htmlString="<?php echo $htmlString; ?>";
      

      【讨论】:

        【解决方案6】:

        正如其他人指出的那样,您需要引号,但我只想指出,有一种速记方法可以编写同一行代码

        var htmlString="<?=$htmlString?>";
        

        看看你可以省略“php echo”的东西,用一个简单的“=”替换它。

        【讨论】:

          【解决方案7】:

          让我们看看这两个选项:

          1.) 在 Javascript 中使用 PHP

          <script>
              <?php $temp = 'hello';?>
              console.log('<?php echo $temp; ?>');
          </script>
          

          注意:文件名只能是 .php。

          2.) 在 PHP 中使用 Javascript 变量

          <script>
            var res = "success";
          </script>
          <?php
             echo "<script>document.writeln(res);</script>";
          ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2015-11-14
            • 1970-01-01
            • 2012-06-06
            • 2017-05-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多