简体   繁体   English

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

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

I have a HTML page with a script tag with PHP in it as follows: 我有一个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>

But running this actually prints like below: 但是运行此命令实际上如下所示:

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

Expected: 预期:

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

On doing inspect element: 在执行检查元素时:

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

I want to post-process the variable myName and derive other values ahead in JS logic. 我想对变量myName进行后处理,并在JS逻辑中提前导出其他值。 So, I need to get the php value in JS variable. 因此,我需要在JS变量中获取php值。

Please note: I am not asking how to get a PHP variable into JS variable (for which there are many different questions on Stack Overflow). 请注意:我不是在问如何将PHP变量转换为JS变量(关于Stack Overflow的问题很多)。 This is a different question and hence not a duplicate for those questions. 这是一个不同的问题,因此不是这些问题的重复

If your code is 如果您的代码是

<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>

Then the expected result can only be 那么预期结果只能是

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

If you want the expected output as described in your question, change your HTML/php to 如果您要按问题所述获得预期的输出,请将HTML / php更改为

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

EDIT 编辑

After posting I saw the comments on another answer. 发布后,我看到了另一个答案的评论。 You want to use the variable in two places so you have to store the result of your php logic somewhere if the name session variable doesn't change and/or make a function to get it if it can change. 您想在两个地方使用该变量,因此,如果name session变量不变,则必须将php逻辑的结果存储在某个地方;和/或如果函数可以更改,则使该函数获取它。

For one such example 举一个这样的例子

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

Note that in any case your script would probably be better off in the element. 请注意,无论如何,您的脚本在元素中可能会更好。

You could assign the PHP data as a JavaSscript variable like this - it will be available for further client side processing as desired and you can update the DOM to reflect the content using standard methods. 您可以像这样将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>

Update 更新

The above snippet was written in haste with little thought given to the various ways in which it could break, but to accommodate for double quotes you could make use of htmlentities 上面的代码片段是匆忙编写的,几乎没有考虑到它可能以各种方式破坏,但是为了容纳双引号,您可以使用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>

Why not just use this? 为什么不只使用它呢?

<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