首页 > 解决方案 > PHP:读取 html 文件并访问 JS 变量

问题描述

假设我在互联网上有一个公共 html 页面,其中包含以下内容:

<html>
    <head>
        <script>
            var variableA = {
                name: "A"
            };
            variableA.id = 1;
        </script>
    </head>
    <body>
        ...
    </body>
</html>

variableA有没有办法用php获取变量的值?

像这样的东西:

$html = file_get_contents($myUrl);
$variableA = magicMethodIamLookingFor("variableA");
print_r($variableA);

有了这个结果:

Array(
    "name" => "A",
    "id" => 1
)

我可以只用正则表达式和json_decode(类似于如何从 HTML 页面获取 Javascript 变量?)但问题是,它不仅仅是一个 json,而且还有变量变化,比如variableA.id = 1;

标签: php

解决方案


注意:使用纯 PHP 脚本,无法访问 JS 变量。

有趣的要求。下面是一个解决方案。让我们考虑一下在 URL 中传递变量名称的情况。让页面名称为“index.php”。浏览 URL 类似于 localhost/index.php?varName=variableA,其中 varName 是以变量名作为值的查询参数。我们也可以通过稍微调整代码来传递逗号分隔的值。但现在不考虑这个。

概述以下步骤

  1. 获取 url.php 的内容并将其放置在 index.php 的隐藏 div 中
  2. 在捕获的内容下,以 var name 和 var value 作为参数调用 Ajax 函数。
  3. 在 ajax 页面中,将名称/值保存到某个数据库或文件中。
  4. 在 ajax 调用之后还有一些 DOM,我们将在其中打印名称/值并在显示相同内容后从 DB 或 File 中删除记录。注意:主要代码在 JS 中 - 请参阅 getVarWithValue(variable) 函数。

    <html>
    <body>
    
        <?php 
            $varName = (isset($_GET['varName']) && trim($_GET['varName']) != "") ? $_GET['varName'] : 'variableA';
        ?>
    
        <div style="display:none">
            <?php
                $html = file_get_contents('./url.php');
                echo $html;
    
            ?>
            <script>
                //THIS IS THE CORE FUNCTION WHICH GETS THE VAR NAME & VALUE
                function getVarWithValue(variable) {
                    var param = '';
                    for (var name in this) {
                        keyValue = [];
                        if (variable == name ) return param += name+'='+JSON.stringify(eval(name));
                    }
                    return false;
                }
    
                var http = new XMLHttpRequest();
                http.open("POST", "setVariableValue.php", false); // 3rd argument makes sure that the call is NOT async.  
                http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                http.onreadystatechange = function() {
                    if (http.readyState == 4 && http.status == 200) {
                        document.getElementById("varValue").innerHTML = http.responseText.toString();
                    }
                };
                http.send(getVarWithValue( '<?php echo $varName ?>' ));
            </script>
        </div>
        <?php
            //$varValue = getValuefromDB(); Get the saved value from DB or file
            echo "The variable value of $varName is: ".$varValue;
            // Write code to remove the row from DB or file
        ?>
    </body>
    

url.php(我们需要从中捕获变量名称和值的页面)

<html>
    <head>
        <script>
            var variableA = {  name: "A" };
            variableA.id = 1;
            var variableB = ["Stack", "Overflow"]
        </script>
    </head>
    <body>
        Some Text
    </body>
</html>

设置变量值.php

<?php
/**
* Write code for saving var name & value to DB or file
*/

推荐阅读