用php正则表达式解析javascript变量

用php正则表达式解析javascript变量,php,regex,Php,Regex,我正在尝试使用PHP解析一些javascript变量 随机网站:(不是我的网站) 输出: 数组([0]=>Array()[1]=>Array()) 我想得到id的值,即fka1q021 //.... content ... function(response) { if (response) { var data = { id: "fka1q021", action: "post", date: "today" }; }

我正在尝试使用PHP解析一些javascript变量

随机网站:(不是我的网站


输出:

数组([0]=>Array()[1]=>Array())

我想得到id的值,即fka1q021

//.... content ...
    function(response) {
        if (response) {
            var data = { id: "fka1q021", action: "post", date: "today" };
        }
        //.....

我怎样才能得到它?谢谢

Javascript是客户端,PHP是服务器端,所以在Javascript运行之前,所有的PHP都已经执行了。请看这个问题:

我不确定你的行为是否合法。。。JS ans PHP不会在同一时间、同一地点执行。也许你是在一个ajax电话后收到的

无论如何,用php分析JS数据可以用json_decode完成。我想你这里的问题是json_解码不会理解{id:“value”},他需要{id:“value”}而不是

if ( preg_match("#data = ({[^}]*})#",$data,$matches) )
    json_decode($matches[1]) ;
比如说,

print_r(json_decode('{"id":"fka1q021","action":"post","date":"today"}') );
呈现php对象:

stdClass Object
(
    [id] => fka1q021
    [action] => post
    [date] => today
)
一个非常简单的正则表达式是

(?:id:\s(\".*?\"))

然后该id将位于捕获组1中


如果需要更复杂的正则表达式,请告诉我。如果是,请提供更多信息。

您可能希望尝试
preg\u match
而不是
preg\u match\u all
。然后,
$matches
数组将包含整个匹配表达式作为其第0个元素,括号内的子表达式中的匹配作为其第一个元素。第一个元素是您要查找的
id

因此,请尝试:

preg_match('/var data = { id: "(.*?)", action: "post", date: "today" };/', $content, $matches);
下面是完整的示例代码:

<?php

$content = <<<ENDOFCONTENT
//.... content ...
  function(response) {
    if (response) {
      var data = { id: "fka1q021", action: "post", date: "today" };
    }
//.....
ENDOFCONTENT;

preg_match('/var data = { id: "(.*?)", action: "post", date: "today" };/', $content, $matches);
print_r($matches);
print "id = " . $matches[1] . "\n";

正则表达式没有得到任何结果,因为您正在对正在阅读的内容应用
htmlspecialchars
,而这将
替换为
,因此表达式找不到包含在其中的


只需删除
htmlspecialchars
,您的模式就会匹配。

@moonwave99 Plain
json\u decode
只理解json,而不理解JavaScript对象文本。@moonwave99-我不能使用json,我没有访问该网站的权限您可以在字符串上使用json\u decode,这就是关键所在。唯一的问题是如何正确地获取变量h您的preg表达式。您需要preg“#data={([^}]*)}#”(未尝试)@PierreGranger:问题是字符串不是有效的JSON。是的,原因是id:“value”而不是“id”:“value”,运气不好。”#id:[^”]*“#”?preg#u match(“Ui”)而不是preg#u match_all?他试图用PHP解析一个JavaScript对象。它不是作为有效的JSON编写的,因此
JSON\u decode
将无法工作,除非他可以“修复”字符串。数组为空。。。Output:Array()我已经编辑了我的答案,以包括您提供的输入内容(示例)以及结果输出。这表明它是有效的。您确定
$content=htmlspecialchars(file\u get\u contents($url))你认为它能做什么?在该行代码之后立即打印出
$content
,以确保文件内容完整,这可能会对您有所帮助。对
htmlspecialchars
有什么看法吗。他的回答得到了我的赞成票。
<?php

$content = <<<ENDOFCONTENT
//.... content ...
  function(response) {
    if (response) {
      var data = { id: "fka1q021", action: "post", date: "today" };
    }
//.....
ENDOFCONTENT;

preg_match('/var data = { id: "(.*?)", action: "post", date: "today" };/', $content, $matches);
print_r($matches);
print "id = " . $matches[1] . "\n";
Array
(
    [0] => var data = { id: "fka1q021", action: "post", date: "today" };
    [1] => fka1q021
)
id = fka1q021