doubi9531 2017-08-06 22:27
浏览 29
已采纳

在JavaScript代码中转义<?php?

I have to echo the below JavaScript code with using only one <?php tag. How to escape <?php inside the 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>

so the result is:

<?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条回答 默认 最新

  • doucong1853 2017-08-06 22:39
    关注

    Mixing php / js can be a bit confusing because the quotes can intersect.

    Notice that we're using " and '. You might want to echo with " or with ' depending on what you need to accomplish. echoing with " in php allows you to use variables in the string, ie: echo "hello {$username}" the lamdas ({}) aren't required, but many devs prefer them.

    Here's an incomplete example to get you started. You just echo it all at once and concatenate with . for strings in 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>'; ?>
    

    Edit: Special thanks to @wh1t3h4ck5 & @jh1711 for helping me tweak this.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵