如何解析PHP中的信息?
问题描述:
我在下面有以下文字,解析它的最简单方法是什么?如何解析PHP中的信息?
if(typeof sa_inst.apiCB == 'function') sa_inst.apiCB({"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}} /* pageview_candidate */);
我想唯一得到的是后(“TXT” :)但不包括<strong>
或其他任何东西。例如,形成上面的文字我想获得这样的:
谷歌,Gmail,Google地图,Google图片等
在数组中。请帮助?
答
该文本是JSON。使用json_decode
解析它。
$str = '{"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}}';
$result = json_decode($str);
//Show all 'Txt' values
foreach($result->AS->Results[0]->Suggests as $suggests)
echo "Txt contains: ".htmlspecialchars($suggests->Txt). "<br/>";
//Show full contents of result
echo "<pre>";
print_r($result);
该输出Txt
第一的价值观:
Txt contains: g<strong>mail</strong>
Txt contains: g<strong>oogle</strong> <strong>maps</strong>
Txt contains: g<strong>oogle</strong> <strong>earth</strong>
Txt contains: g<strong>ames</strong>
Txt contains: g<strong>oogle</strong> <strong>images</strong>
Txt contains: g<strong>amestop</strong>
Txt contains: g<strong>rainger</strong>
,然后将完整JSON数据量太大:
stdClass Object
(
[AS] => stdClass Object
(
[Query] => g
[FullResults] => 1
[Results] => Array
(
[0] => stdClass Object
(
[Type] => AS
[Suggests] => Array
(
[0] => stdClass Object
(
[Txt] => google
[Type] => AS
[Sk] =>
)
[1] => stdClass Object
(
[Txt] => gmail
[Type] => AS
[Sk] => AS1
)
[2] => stdClass Object
(
[Txt] => google maps
[Type] => AS
[Sk] => AS2
)
[3] => stdClass Object
(
[Txt] => google earth
[Type] => AS
[Sk] => AS3
)
[4] => stdClass Object
(
[Txt] => games
[Type] => AS
[Sk] => AS4
)
[5] => stdClass Object
(
[Txt] => google images
[Type] => AS
[Sk] => AS5
)
[6] => stdClass Object
(
[Txt] => gamestop
[Type] => AS
[Sk] => AS6
)
[7] => stdClass Object
(
[Txt] => grainger
[Type] => AS
[Sk] => AS7
)
)
)
)
)
)
答
这是可行的,但我 '从' 功能删除'
<?php
echo $text = 'if(typeof sa_inst.apiCB == function sa_inst.apiCB({"AS":{"Query":"g","FullResults":1,"Results":[{"Type":"AS","Suggests":[{"Txt":"g<strong>oogle</strong>","Type":"AS","Sk":""},{"Txt":"g<strong>mail</strong>","Type":"AS","Sk":"AS1"},{"Txt":"g<strong>oogle</strong> <strong>maps</strong>","Type":"AS","Sk":"AS2"},{"Txt":"g<strong>oogle</strong> <strong>earth</strong>","Type":"AS","Sk":"AS3"},{"Txt":"g<strong>ames</strong>","Type":"AS","Sk":"AS4"},{"Txt":"g<strong>oogle</strong> <strong>images</strong>","Type":"AS","Sk":"AS5"},{"Txt":"g<strong>amestop</strong>","Type":"AS","Sk":"AS6"},{"Txt":"g<strong>rainger</strong>","Type":"AS","Sk":"AS7"}]}]}} /* pageview_candidate */);';
echo '<br />';
$text = strip_tags($text); // remove html tags
$a = explode('"Txt":"', $text);
$app = array();
foreach ($a as $c) {
$b = explode('"', $c);
$app = $b[0];
}
unset($app[0]);
var_dump($app);
?>
你试图从字面上解析的文本包含代码,即你试图解析什么看起来像Javascript? – deceze 2010-09-13 06:35:44
我不完全肯定是诚实的,但是这是通过调用API返回的。我只需要这些信息以不同的方式显示它。 – user220755 2010-09-13 06:37:44
...你不确定你想要解析什么?你最好更好地研究这个API。似乎很奇怪,它应该返回一个不可用的JS块。 – mpen 2010-09-13 07:20:35