逃避<! - ?php里面的JavaScript代码?

时间:2017-08-06 22:27:01

标签: javascript php

必须仅使用一个<?php标记回显以下JavaScript代码。如何在回声中逃避<?php

<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>'; ?>

2 个答案:

答案 0 :(得分:1)

正如@admcfajn回答的那样,这是解决它的方法,但有时我必须通过数千行代码进行这些更改,所以我通常使用正则表达式进行更改。我最终得到了这个解决方案:

  • 将所有<?php代码替换为';
  • 将所有?>代码替换为echo '
  • 在JavaScript代码块中,使用'
  • 转义单引号\'
  • 在JavaScript代码块中,将长echo函数分解为多个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>
        ';

答案 1 :(得分:-1)

混合php / js可能有点混乱,因为引号可以相交。

请注意,我们正在使用"'。您可能希望与"'回应,具体取决于您需要完成的工作。在PHP中用"回显允许你在字符串中使用变量,即:echo "hello {$username}" lamdas({})不是必需的,但许多开发者更喜欢它们。

这是不完整的示例,可帮助您入门。您只需立即回显所有内容,并使用.连接php中的字符串。

<?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&amp; @ jh1711帮我调整一下。