用php正则表达式解析javascript变量
我正在尝试使用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" }; }
输出: 数组([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 Plainjson\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