繁体   English   中英

将PHP变量回显到JavaScript变量中将以HTML格式显示PHP变量

[英]Echoing PHP variable into JavaScript variable prints the PHP variable in HTML

我有一个HTML页面,其中带有带有PHP的脚本标签,如下所示:

<div id="myName">
<script type="text/javascript">
   var myName = <?php
   if(isset($_SESSION['name']) && $_SESSION['name'] != ''){
       echo $_SESSION['name'];
   }
   else
       echo "NotSet";
   ?>;
document.write(myName);
</script>
</div>

但是运行此命令实际上如下所示:

<div id="myName">
    var myName=SomeName;
    document.write(myName);
</div>

预期:

<div id="myName">
    SomeName
</div>

在执行检查元素时:

<div id="myName">
<script type="text/javascript">
    "var myName=SomeName;
    document.write(myName);"
</script>
</div>

我想对变量myName进行后处理,并在JS逻辑中提前导出其他值。 因此,我需要在JS变量中获取php值。

请注意:我不是在问如何将PHP变量转换为JS变量(关于Stack Overflow的问题很多)。 这是一个不同的问题,因此不是这些问题的重复

如果您的代码是

<div id="myName">
<scrpit type="text/javascript">
   var myName = <?php
   if(isset($_SESSION['name']) && $_SESSION['name'] != ''){
       echo $_SESSION['name'];
   }
   else
       echo "Not Set";
   ?>;
</script>
</div>

那么预期结果只能是

<div id=" myName">
    <script type="text/javascript">
        var myName = RESULT OF PHP CODE HERE
    </script>
</div>

如果您要按问题所述获得预期的输出,请将HTML / php更改为

<div id="myName">
   <?php
   if(isset($_SESSION['name']) && $_SESSION['name'] != ''){
       echo $_SESSION['name'];
   }
   else
       echo "Not Set";
   ?>;
</div>

编辑

发布后,我看到了另一个答案的评论。 您想在两个地方使用该变量,因此,如果name session变量不变,则必须将php逻辑的结果存储在某个地方;和/或如果函数可以更改,则使该函数获取它。

举一个这样的例子

<?php
    function getNameFromSession() {
        if(isset($_SESSION['name']) && $_SESSION['name'] != ''){
            return $_SESSION['name'];
       }
       else
            return "Not Set";
    }

    $myName = getNameFromSession();
?>

<div id=" myName">
    <?php echo $myName; ?>
    <script type="text/javascript">
        var myName = "<?php echo $myName; ?>";
    </script>
</div>

请注意,无论如何,您的脚本在元素中可能会更好。

您可以像这样将PHP数据分配为JavaSscript变量-根据需要将其用于进一步的客户端处理,并且可以使用标准方法更新DOM以反映内容。

<html>
    <head>
        <title>php & js vars</title>
    </head>
    <body>
    <div id='myName'>
        <script>
            <?php
                printf( 'var myName="%s";', !empty( $_SESSION['name'] ) ? $_SESSION['name'] : 'NotSet' );
            ?>
            document.getElementById('myName').innerHTML=myName;
            alert( myName );// var still available...
        </script>
    </div>
    </body>
</html>

更新

上面的代码片段是匆忙编写的,几乎没有考虑到它可能以各种方式破坏,但是为了容纳双引号,您可以使用htmlentities

<?php
    session_start();
    $_SESSION['name']='Geronimo"s Revenge';
?>
<html>
    <head>
        <title>php & js vars</title>
    </head>
    <body>
    <div id='myName'>
        <script>
            <?php
                printf( 'var myName="%s";', !empty( $_SESSION['name'] ) ? htmlentities( $_SESSION['name'], ENT_QUOTES   ) : 'NotSet' );
            ?>
            document.getElementById('myName').innerHTML=myName;
        </script>
    </div>
    </body>
</html>
<div id="myName">

</div>

<scrpit type="text/javascript">
   <?php
   if(isset($_SESSION['name']) && $_SESSION['name'] != ''){ ?>
       var myName =<?php echo $_SESSION['name'];?> ;
   <?php }
   else{
  ?>
      var myName = "NotSet";
   <?php } ?>;
  document.getElementById("myName").innerHTML=myName ;

document.write(myName);
</script>

为什么不只使用它呢?

<div id="myName">
   <?php
   if(isset($_SESSION['name']) && $_SESSION['name'] != ''){
       echo $_SESSION['name'];
   }
   else
       echo "NotSet";
   ?>;
</div>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM