php - 奇怪的Javascript结构

标签 php javascript arrays parsing

我正在尝试通过解析从网站获取信息,并且我发现了这段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中是否有任何简单的处理方法?我已经能够在我的代码中检索此特定字符串。

最佳答案

Is this a certain type of Javascript Object?



正如其他人已经评论过的那样,它是JavaScript object literal MDN

And, if so, is there any easy handling of it in PHP? I'm already able to retrieve this certain string in my code.



是的,有一些简单的处理方法。您所拥有的字符串非常接近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
)

关于php - 奇怪的Javascript结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18341908/

相关文章:

php从mysql数据库获取数据

ios - 如何快速从数组中获取对象索引

arrays - 在 Swift 中将字符串缩减为字典

php - 使用此 php 代码创建一个函数

php - zend 从 url 保存图像

php - Sql Server 2008 和 PHP - sqlsvr_escape_string?

Javascript 递归仅触发一次

c# - Controller 中的 ASP NET MVC 数组到客户端数组

javascript - 使用 AJAX、PHP 和 MYSQL 在另一个复选框中显示 html 表单复选框中的多个值

javascript - 如何在javascript中清除数组?