【问题标题】:Return large amount of JavaScript from a PHP function that includes quotation marks从包含引号的 PHP 函数返回大量 JavaScript
【发布时间】:2014-10-09 02:03:24
【问题描述】:

我在 php 中有以下函数,它接受一个参数,用于输出带有参数的 javascript 代码。

我有两个问题:

  1. return 用引号将javascript代码封装起来,但是javascript代码本身的引号实际上导致它提前中断。

  2. javascript 中的 $ 标记不起作用,因为我认为 jquery $ 标记被视为 php $,有什么方法可以使 javascript 代码段中的美元符号和引号不会混淆 php?

    function returnJS($input){
    
    return "    
    
        $("#toggle1").click(function(){
            if(toggle != 1 && open == true){
                open = false;
                var panel = "#panel"+toggle;
                $(panel).slideToggle("slow");
            }
            toggle = $input;// I need this to update from php argument
            $("#panel1").slideToggle("slow",function(){
    
            $('html, body').animate({
                scrollTop: $("#panel1").offset().top
                }, animation_time );});
    
            if(open == true)
                open = false;
            else
                open = true;
    
            return false;
        });
    
     "
     }
    

这样做的目的是我想构建一个包含可变数量的这些段的 javascript 文件,我将让 php 完全构建可以在网页中使用的 javascript 文件。

编辑:

例如:

<?php
$bar = 'hello';             
$tmp = "My name is $bar";
echo $tmp;
?>

在我的代码中,我不想让 php 对 $ 变量感到困惑,我想让 javascript 代码中的那些 $ 对 php 完全不可见。

【问题讨论】:

    标签: javascript php return


    【解决方案1】:

    我的建议:

    • 使用单引号(或者,更好的是,php 5.3+ 上的 nowdoc)来防止过度转义
    • 将 javascript 中使用的所有值编码为 json 以避免引号/换行问题
    • 使用小型模板进行变量替换

    例子:

        $js = 
    <<<'JS'
        $("#toggle1").click(function(){
            if(toggle != 1 && open == true){
                open = false;
                var panel = "#panel"+toggle;
                $(panel).slideToggle("slow");
            }
            toggle = {{input}}; // I need this to update from php argument
            $("#panel1").slideToggle("slow",function(){
    
                $('html, body').animate({
                scrollTop: $("#panel1").offset().top
                }, animation_time );});
    
            if(open == true)
                open = false;
            else
                open = true;
    
            return false;
        });
    
        return;
    JS;
        $input = json_encode($input);
        return str_replace('{{input}}', $input, $js);
    }
    
    print returnJS('hi "there" ');
    

    【讨论】:

      【解决方案2】:

      您需要通过在双引号前面加一个 \ 来转义双引号。例如:

      function returnJS($input){
      
      return '    
      
          $("#toggle1").click(function(){
              if(toggle != 1 && open == true){
                  open = false;
                  var panel = "#panel"+toggle;
                  $(panel).slideToggle("slow");
              }
              toggle = '.$input.';// I need this to update from php argument
              $("#panel1").slideToggle("slow",function(){
      
              $(\'html, body\').animate({
                  scrollTop: $("#panel1").offset().top
                  }, animation_time );});
      
              if(open == true)
                  open = false;
              else
                  open = true;
      
              return false;
          });
      
       '
       }
      

      【讨论】:

      • 那些$的呢?我知道 php 甚至可以在字符串中影响 $ 。有没有办法让php忽略字符串中的$?
      • 那只是双引号,你应该把回车改成单引号,我会编辑我的答案
      猜你喜欢
      • 2016-03-24
      • 2018-12-05
      • 1970-01-01
      • 2022-11-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多