我正在尝试通过解析从网站获取信息,我发现了这段javascript代码:
var product = {
identifier: '198980',
valid: '1378159199',
fn: 'Entrada para IMAX Barcelona, para cualquier sesión y día',
description: '',
category : [ 'Barcelona','Planes del día','Actividades'],
brand: '',
price: '5.00',
amount: '9.75',
currency: 'EUR',
url: 'http://es.letsbonus.com/ocio/barcelona/entrada-a-imax-port-vell-2013-08-02-198980',
photo: 'http://media5.letsbonus.com/products/198000/198980/13509238959102-0-680x276.jpg'
};
正如您所看到的,这个javascript代码包含网站中某个产品的大量信息,因此解析它会很有趣。我可以看到这不是JSON对象,也不是Javascript数组。
我的问题是:
这是某种类型的Javascript对象吗?如果是这样,在PHP中是否有任何简单的处理方式?我已经能够在我的代码中检索这个特定的字符串了。
答案 0 :(得分:5)
这是一个JavaScript对象文字。
如果你是直接从PHP获取它,你必须自己解析它(也许使用正则表达式就足够了)。我建议你也查看以下链接:
答案 1 :(得分:2)
这是某种类型的Javascript对象吗?
正如其他人已经评论过的那样,它是JavaScript object literal MDN。
如果是这样,在PHP中是否有任何简单的处理方法?我已经能够在我的代码中检索这个特定的字符串了。
嗯,是的,有一些简单的处理。你得到的字符串非常接近JSON,UTF-8编码,并没有特别转义,也没有深度嵌套。
所以你可以运行一些regular expression based search and replaces Docs,然后只运行json_decode
Docs它,如果返回NULL
你发现错误,否则你肯定会得到你的结果:
$buffer = <<<BUFFER
var product = {
identifier: '198980',
valid: '1378159199',
fn: 'Entrada para IMAX Barcelona, para cualquier sesión y día',
description: '',
category : [ 'Barcelona','Planes del día','Actividades'],
brand: '',
price: '5.00',
amount: '9.75',
currency: 'EUR',
url: 'http://es.letsbonus.com/ocio/barcelona/entrada-a-imax-port-vell-2013-08-02-198980',
photo: 'http://media5.letsbonus.com/products/198000/198980/13509238959102-0-680x276.jpg'
};
BUFFER;
print_r(
json_decode(
preg_replace(
[
'/^\R?var product = ({.*});\R?$/s',
'/\'([^\']*+)\'/',
'/^( {4})([a-z]+)\s*:/m',
],
['$1', '"$1"', '$1"$2":'], $buffer
)
)
);
输出(Demo):
stdClass Object
(
[identifier] => 198980
[valid] => 1378159199
[fn] => Entrada para IMAX Barcelona, para cualquier sesión y día
[description] =>
[category] => Array
(
[0] => Barcelona
[1] => Planes del día
[2] => Actividades
)
[brand] =>
[price] => 5.00
[amount] => 9.75
[currency] => EUR
[url] => http://es.letsbonus.com/ocio/barcelona/entrada-a-imax-port-vell-2013-08-02-198980
[photo] => http://media5.letsbonus.com/products/198000/198980/13509238959102-0-680x276.jpg
)
答案 2 :(得分:1)
那是JavaScript object literal。 JSON基于这种结构化数据样式。
如果您从JavaScript处理了这些数据,只需将其转换为JSON字符串:JSON.stringify(product);
从PHP中,只需通过JSON传输并使用json_decode
如果您只将此脚本文件作为文本。然后,你需要谷歌,但想法是解析AST,选择你想要的作品,eval
它(以一种有希望的安全方式)并使用它,或{{1}结果回到PHP。