当前位置: 首页 > 知识库问答 >
问题:

将PHP变量传递到外部JavaScript(或jQuery)文件的最有效方法

王炜
2023-03-14

我读了几篇关于这个问题的帖子,发现这是最简单的解决方案,下面是我的代码:

PHP代码中的js

<script>
    <!--// 
      var jsBaseurl = <?php echo json_encode(BASE_URL."/"); ?>;
      var jsTitle = <?php echo json_encode($h1_title); ?>;
      var jsSubtl = <?php echo json_encode($h2_title);?>;
    //-->
</script>
<script src="external.js"></script>

以及外部。js

var siteURL=jsBaseurl;
alert(siteURL+jsTitle+jsSubtl)

它运行良好,我的问题是关于彭日成和比普拉夫的以下评论:

警告:这可能会杀死你的网站。例子:

<?php $myVarValue = '<!--<script>'; ?>

详见这个问题。解决方法:利用JSON_HEX_TAG逃生

另一个缺点是会影响初始页面加载时间。-比普拉夫

我想知道Pang评论的一个简单解决方案,以及这一切对性能(页面加载时间)的影响。非常感谢!

共有2个答案

燕航
2023-03-14

很确定这不会破坏它。json_encode的全部要点是转储是安全的。

郁光熙
2023-03-14

>

  • 示例1
    考虑这段简单的代码。

    <script>
        <?php $myVarValue = 'hello world'; ?>
        var myvar = <?php echo json_encode($myVarValue); ?>;
        alert(myvar);
    </script>
    

    输出:

    <script>
        var myvar = "hello world";
        alert(myvar);
    </script>
    

    它提醒Hello world。好。

    示例2
    让我们尝试使用

    <script>
        <?php $myVarValue = '</script>'; ?>
        var myvar = <?php echo json_encode($myVarValue); ?>;
        alert(myvar);
    </script>
    

    输出:

    <script>
        var myvar = "<\/script>";
        alert(myvar);
    </script>
    

    它发出警报

    如您所见,斜杠(/)被正确转义为\/

    示例3
    现在,考虑这个非常特殊的字符串:<代码>

    <script>
        <?php $myVarValue = '<!--<script>'; ?>
        var myvar = <?php echo json_encode($myVarValue); ?>;
        alert(myvar);
    </script>
    

    输出:

    <script>
        var myvar = "<!--<script>";
        alert(myvar);
    </script>
    

    令人惊讶的是,它不会发出任何警报,错误控制台中也没有任何内容。什么

    如果检查JSON的规范,

    图片改编自json.org

    要得到一个完整且解释得很好的答案,请阅读这个令人惊讶的问题

    我自己做了几个简单的测试。浏览器实际上忽略了之后的所有内容

    而且

    • 如果你在$myVarValue中不仅有一个字符串,而且有一个像数组这样的复杂对象("key"=

    解决方案是什么?使用JSON\u HEX\u标记来转义

    <script>
        <?php $myVarValue = '<!--<script>'; ?>
        var myvar = <?php echo json_encode($myVarValue, JSON_HEX_TAG); ?>;
        //                                            ^^^^^^^^^^^^^^
        alert(myvar);
    </script>
    

    输出:

    <script>
        var myvar = "\u003C!--\u003Cscript\u003E";
        alert(myvar);
    </script>
    

    它发出警报

    因为没有更多的

    注意:如果你不打印成代码,你不需要JSON_HEX_TAG

    [1]这里,“ok”仅表示它不受

    事实上,这很明显。如果获取$myVarValue的值所需的时间很长(例如,您正在从数据库获取大量数据),PHP将不得不等待,浏览器和用户也需要等待。这意味着初始页面加载时间更长。如果您稍后使用Ajax加载数据,他们不必等待看到初始结果,但是,Ajax调用将是一个额外的HTTP请求,因此这意味着服务器的工作负载将增加,网络的负载也将增加。

    当然,每种方法都有其优缺点,所以你必须决定。我建议读这篇优秀的Q

  •  类似资料:
    • 我时不时地要把一些变量从PHP传递到JS脚本。现在我是这样做的: 但这是非常难看的,而且我不能将我的JS脚本隐藏在.JS文件中,因为它必须由PHP解析。处理这个问题的最佳解决方案是什么?

    • 问题内容: 我正在使用Google Maps制作可以加载数据库中包含经纬度数据的标记的地图。我希望用户可以通过单击按钮来加载三个不同的“图层”。单击该按钮时,将在服务器上执行php函数,从而根据数据库中的信息创建xml文件。然后调用AJAX函数提取此xml数据,然后将其用于创建地图标记。没有为每个“层”使用单独的PHP函数(除了SQL查询所在的行,这是相同的东西),有没有办法将AJAX中的java

    • 问题内容: 我有一个PHP会话变量,在整个会话过程中仍然有效。在开头部分,我包含了我的JavaScript文件。 如果需要以下内容,如何将会话变量传递到JavaScript文件中。 由于无法在JavaScript文件中识别出,因此上面的代码不起作用。因此,我必须放入PHP文件本身,但是如何将其保留在JavaScript文件中? 问题答案: 在您的PHP文件中,您可以将用户设置为全局变量: 在包含外

    • 问题内容: 目前,我在隐藏的输入字段中回显某些变量,并在需要时使用Javascript读取它们。 我和一个同事现在正在考虑使用PHP生成一个额外的Javascript文件,该文件仅包含Javascript的所有变量。这样,变量已经存在,HTML中没有多余的代码。 有什么好的方法可以将变量从PHP传递到Javascript?我们的解决方案听起来如何? 问题答案: 通用数据传递 JavaScript常

    • 问题内容: 如何在不刷新页面的情况下将变量从jQuery传递到PHP?当我单击一个复选框时,我想将一个变量从jQuery传递到PHP。我也在使用formdialog。 我的PHP代码 我的JavaScript代码 问题答案: Ajax可以做到这一点。谷歌它,并检查api.jquery.com并查看ajax函数,.ajax(),.post(),.get(),.load()等。 关于您的特定问题,这是

    • 问题内容: 我有一个用JS计算的值,希望将其作为输入表单的一部分传递给PHP脚本。我如何将JS值的JS值作为POST参数获取? 基本上,在提交时,我需要将var通过post传递到下一个脚本。 想到的第一个想法是创建一个不可见的输入表单,该表单中包含值并与该表单一起输入,这可能吗? 问题答案: 是的,您可以在JavaScript代码中使用和设置该隐藏字段的值,以便将其与其他表单数据一起发布。