簡體   English   中英

從包含引號的PHP函數返回大量JavaScript

[英]Return large amount of JavaScript from a PHP function that includes quotation marks

我在php中具有以下功能,它需要一個參數,並且打算輸出帶有參數的javascript代碼。

我有兩個問題:

  1. 返回值用引號將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完全不可見。

您需要在雙引號前面加上\\來轉義雙引號。 例如:

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 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" ');

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM