【问题标题】:Heredoc escaping PHP variables in JavaScriptHeredoc在JavaScript中转义PHP变量
【发布时间】:2011-07-16 12:47:19
【问题描述】:

我有以下代码:

<?php
    if ($zweck == "buchhaltung") {
        echo <<<EOF
        <script type="text/javascript">
            jQuery(document).ready(function() {
            jQuery("#$grid_name").jqGrid({
                url: 'modules/mod_jqgrid/ex_get3.php?tb=$tb'
                .....
        </script>
EOF;
    };
?>

... 似乎无法正确渲染。 难道我们不能像我在倒数第二行那样在 JavaScript 代码的 heredoc 中使用 PHP 变量吗?

在最后一行,我在 PHP 变量 $tb 周围使用了“'”。这个语法正确吗?

以下代码在 heredoc 中作为 JavaScript 代码:

dataInit:function(el){
    $(el).datepicker({dateFormat:'dd.mm.yy'});
},
defaultValue: function(){

// Maybe PHP "thinks" that $(el) is a PHP variable?

var currentTime = new Date();

【问题讨论】:

  • Heredoc 现在不使用了..尝试用其他方式来做..如果你想解决这个问题,如果你需要找到确切的问题,你能否给出完整的代码块跨度>
  • @kvijayhari:这不是真的。如果要注入一些 JS,heredoc 是最方便的方式。
  • @kvijayhari:虽然它没有贬值......
  • @Jon 其实写 JS 最方便的方式就是纯洁的 JS :)
  • 你有什么比推荐的。我的代码块很大,它可以在没有使用 heredoc 的 php 中的 if-conditonal 的情况下工作。我的问题是我想根据 php 条件回显不同的 javascript。而且我想防止转义整个 javascript 代码,因为我使用了很多 " 和 '

标签: php javascript heredoc


【解决方案1】:

变量扩展是在 heredoc 字符串中执行的,所以这不是问题。您提供的代码应该可以正常工作;如果没有,也许还有其他问题?你到底是什么意思“不正确渲染”?

【讨论】:

  • 它不输出变量。 javascript代码很好......如果我在javascript之前删除php代码......它输出数据很好。我想也许 $tb 没有输出,因为它在一个 ' 内,这在通常的 php 代码中也会被阻止。
  • 尝试添加花括号。也会使阅读更干净。 php?tb={$tb}。并确保 $tb 实际上有一个值
  • @Email: “如果我在 javascript 之前删除了 php 代码......它输出的数据很好” - 这是否表明问题出在那个PHP代码,而不是heredoc?
  • 感谢您的提示。 php 在heredoc 中处理以下javascript 代码是否正确? $(el).datepicker({dateFormat:'dd.mm.yy'});
  • @Email:确实如此。您可以通过尝试并查看传递到浏览器的结果 HTML 来自行检查。
【解决方案2】:

为了让你明白:

<?php
    if ($zweck == "buchhaltung"){
?>

<script type="text/javascript">
    jQuery(document).ready(function(){
        jQuery("#<?php echo $grid_name ?>").jqGrid({
            url: 'modules/mod_jqgrid/ex_get3.php?tb=<?php echo $tb?>',...

无需转义任何内容:只需将 JavaScript 代码与 PHP 分开即可。

以本地方式使用每种语言。

【讨论】:

  • 谢谢。实际上,这是我最初的做法,但我犯了一个错误,在带有附加条件的条件之后关闭 if: ;。感谢您再次让我走上正确的道路+1。我想选择使heredoc起作用的答案,因为我的问题是关于这个的,但这是公平的......如果它不能在30分钟内解决 - 我会检查你的。谢谢
  • @Email 使heredoc 工作你必须检查生成的语法。但是没有单一的理由使用heredoc
猜你喜欢
  • 2018-01-07
  • 2015-01-28
  • 2015-04-21
  • 2013-06-15
  • 2018-02-24
  • 2017-11-21
  • 2019-11-21
  • 2016-12-27
  • 2012-07-01
相关资源
最近更新 更多