2017-08-06 110 views
-4

必須只使用一個<?php標籤回顯以下JavaScript代碼。回聲裏面如何轉義<?phpescape <?php裏面的JavaScript代碼?

<script type="text/javascript"> 

function drawLatestTen() { 
    var data = google.visualization.arrayToDataTable(<?php echo json_encode($json); ?>); 

    var ac = new google.visualization.ComboChart(document.getElementById('ipt_dolt_ten_stat')); 
    ac.draw(data, { 
     title : '<?php _e('Last 30 days form submission statistics', 'ipt_dolt'); ?>', 
     height : 300, 
     vAxis : {title : '<?php _e('Submission Hits', 'ipt_dolt') ?>'}, 
     hAxis : {title : '<?php _e('Date', 'ipt_dolt'); ?>'}, 
     seriesType : 'bars', 
     series : {<?php echo count($json[0]) - 2; ?> : {type : 'line'}}, 
     legend : {position : 'top'}, 
     tooltip : {isHTML : true} 
    }); 
} 

</script> 

所以結果是:

<?php echo '<script type="text/javascript"> 

function drawLatestTen() { 
    var data = google.visualization.arrayToDataTable(<?php echo json_encode($json); ?>); 

    var ac = new google.visualization.ComboChart(document.getElementById(\'ipt_dolt_ten_stat\')); 
    ac.draw(data, { 
     title : \'<?php _e(\'Last 30 days form submission statistics\', \'ipt_dolt\'); ?>\', 
     height : 300, 
     vAxis : {title : \'<?php _e(\'Submission Hits\', \'ipt_dolt\') ?>'}, 
     hAxis : {title : \'<?php _e(\'Date\', \'ipt_dolt\'); ?>\'}, 
     seriesType : \'bars\', 
     series : {<?php echo count($json[0]) - 2; ?> : {type : \'line\'}}, 
     legend : {position : \'top\'}, 
     tooltip : {isHTML : true} 
    }); ?> 
} 

</script>'; ?> 
+0

你不需要'echo'代碼,只是閉上你的PHP代碼'?>',粘貼代碼,正是因爲它是,然後重新打開與'<?php'你的PHP代碼。這是有效的,例如:'<?php $ var = TRUE; if($ var){?>

Hello world

' –

+0

@AlejandroIván我必須這樣做是因爲我的混淆器腳本。 –

+1

你不能在另一個php標籤中打開一個php標籤。不能這樣做'<?php ?>' –

回答

-1

混合PHP/JS可能會有點混亂,因爲引號可以相交。

請注意,我們使用的是"'。您可能需要回應"',具體取決於您需要完成的內容。在PHP中迴應"允許你在字符串中使用變量,即:echo "hello {$username}" lamdas({})不是必需的,但許多開發人員更喜歡它們。

下面是一個不完整開始的例子。您只需一次回顯所有內容,並在.中連接字符串。

<?php 
$title = translate('Submission Hits', 'ipt_dolt'); 
$date = translate('Date', 'ipt_dolt'); 
echo ' 
<script type="text/javascript"> 

function drawLatestTen() { 
    var data = google.visualization.arrayToDataTable('. json_encode($json) .'); 

    var ac = new google.visualization.ComboChart(document.getElementById('ipt_dolt_ten_stat')); 
    ac.draw(data, { 
     title : '<?php _e('Last 30 days form submission statistics', 'ipt_dolt'); ?>', 
     height : 300, 
     vAxis : {title : "'. $tite .'"}, 
     hAxis : {title : "'.$date.'"}, // notice two quotes, double to denote a string in js and singles to break/concatenate the php output. (that's where things get tricky.) 
     seriesType : 'bars', 
     series : { '. (count($json[0]) - 2) .' : {type : 'line'}}, 
     legend : {position : 'top'}, 
     tooltip : {isHTML : true} 
    }); 
} 
</script>'; ?> 

編輯:特別感謝@ wh1t3h4ck5 & @ jh1711幫我捏捏這一點。

+0

我還會補充一點,這取決於你可能在php中使用多行字符串時遇到問題。很確定這主要是使用單引號(如上所述)。 – admcfajn

+2

'{}'是必需的,因爲實際上大多數數據不是來自一維變量,例如,'{$ x-> y}','{$ a [「x」]}'因此,甚至在'{$ a}'情況下使用它也是很好的做法(但是這是真實的,對於最後一種情況並不需要)。 – Wh1T3h4Ck5

+2

你的方向是正確的。但是你濫用'_e'函數,這是'echo translate'的wordpress別名。你可以使用'translate'和相同的參數。順便說一句:標題需要以相同的方式處理。之後,它應該可以正常工作。 – jh1711

1

@admcfajn回答說,這是popper的方式來解決它,但有時我必須通過數千行代碼做這些更改,所以我通常使用正則表達式來更改它。我結束了此解決方案:

  • 替換所有<?php標籤與';
  • echo '
  • 在JavaScript代碼塊替換所有?>標籤,使用\'
  • 在JavaScript代碼塊逃避單引號' ,將長的echo函數分解成幾個回聲函數。

我這樣做,它工作正常。

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

function drawLatestTen() { 
    var data = google.visualization.arrayToDataTable('; 
     echo json_encode($json); 
echo '); 

    var ac = new google.visualization.ComboChart(document.getElementById(\'ipt_dolt_ten_stat\')); 
    ac.draw(data, { 
     title : \''; 
     _e('Last 30 days form submission statistics', 'ipt_dolt'); 
echo '\', 
     height : 300, 
     vAxis : {title : \''; 
     _e('Submission Hits', 'ipt_dolt'); 
echo '\'}, 
     hAxis : {title : \''; 
     _e('Date', 'ipt_dolt'); 
echo '\'}, 
     seriesType : \'bars\', 
     series : {'; 
     echo count($json[0]) - 2; 
echo ' : {type : \'line\'}}, 
     legend : {position : \'top\'}, 
     tooltip : {isHTML : true} 
    }); 
} 

</script> 
     '; 
+0

幹得好!也許heredoc也可以在這裏派上用場。 http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc – admcfajn