【问题标题】:Escaping this javascript code in php在 php 中转义这个 javascript 代码
【发布时间】:2016-10-13 19:08:17
【问题描述】:

我无法转义此代码 sn-p,如果用户名已登录,我只想在页面上显示该代码。然后它只是回显该代码,但正如您所见,这是我的一大块需要逃跑。我该怎么做呢?通常我自己不会有太多麻烦,但这段代码不会简单地工作。

//if user is logged in echo the code

if (isset($_SESSION['username'])){

echo '
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PZWSZ2"
   height="0" width="0"   style="display:none;visibility:hidden"></iframe></noscript>
   <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
   new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
   j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
   '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
   })(window,document,'script','dataLayer','GTM-PZWSZ2');</script>
   ';
  }
?>

【问题讨论】:

  • Google PHP nowdoc
  • HTML 部分没有 PHP,所以直接跳出 PHP ?>

标签: javascript php string escaping


【解决方案1】:

问题是你有单引号来封装 HTML 和更多没有被转义的 HTML 内 \'。见PHP Strings

但是要提供一个替代方案,因为 HTML 中没有 PHP,只需跳出 PHP:

<?php
if (isset($_SESSION['username'])){
?>
   <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PZWSZ2"
   height="0" width="0"   style="display:none;visibility:hidden"></iframe></noscript>
   <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
   new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
   j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
   '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
   })(window,document,'script','dataLayer','GTM-PZWSZ2');</script>
<?php
  }
?>

另请参阅Alternative syntax for control structures,它可能更容易或更易读。

【讨论】:

    【解决方案2】:

    恕我直言,最简单的方法是使用nowdoc

    $javascript = <<<'JAVASCRIPT'
    <noscript><iframe src="//www.googletagmanager.com/ns.html?id=GTM-PZWSZ2"
       height="0" width="0"   style="display:none;visibility:hidden"></iframe></noscript>
       <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
       new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
       j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
       '//www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
       })(window,document,'script','dataLayer','GTM-PZWSZ2');</script>
    JAVASCRIPT
    
    if (isset($_SESSION['username'])) {
        echo $javascript;
    }
    

    【讨论】:

    • 最简单的方法就是不使用 PHP ;-)
    • @AbraCadaver 更好:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-02
    • 2015-03-01
    • 1970-01-01
    相关资源
    最近更新 更多