我有一个简单的HTML文件,其中包含我试图删除的数据,以便我可以处理这些变量。
<html>
<head>
<link rel="stylesheet" type="text/css" href="/app/css/style.css" />
</head>
<body>
<div class="page">
<div class ="pane">
<div class ="chart">
<h1 style='float: left;'>Summary</h1>
<div style='clear: both;'></div>
<script type="text/javascript" src="protovis/protovis-d3.2.js"></script>
<script type="text/javascript+protovis">var data = [
{"label":"A (2)", 'complete': 2.0, 'pending': 0.0}
,{"label":" B (8)", 'complete': 8, 'pending': 0.0}
,{"label":"C (10)", 'complete': 10, 'pending': 0.0}
,{"label":"D (18)", 'complete': 18.0, 'pending': 0.0}
,{"label":"E (21)", 'complete': 21, 'pending': 0.0}
];
</script>
</div>
</div>
</div>
</body>
</html>
使用PHP,我试图将此HTML中包含的数据解析为变量。 I.E。:$A = 2
,$B = 8
,$C = 10
,$D = 18
,$E = 21
。
到目前为止,我一直在尝试使用simple_html_dom.php库来读取数据,但我还没有能够检索上面JavaScript中包含的JSON的内容。
如何从上面的HTML中提取"label":"A (2)"
以便我可以将值(在本例中为2)作为PHP变量访问?
答案 0 :(得分:0)
试试这个
var data = [
{"label":"A (2)", 'complete': 2.0, 'pending': 0.0}
,{"label":" B (8)", 'complete': 8, 'pending': 0.0}
,{"label":"C (10)", 'complete': 10, 'pending': 0.0}
,{"label":"D (18)", 'complete': 18.0, 'pending': 0.0}
,{"label":"E (21)", 'complete': 21, 'pending': 0.0}
];
output
for(var i =0; i <= data.length; i++){
alert(data[i]['label']);
}
答案 1 :(得分:0)
我用file_get_contents()
解决了这个问题。
注意:强>
解析实际上只是一个快速而肮脏的解决方案。只有在文件中只有一个[
和一个]
必须标记json-string时,它才有效。所以如果你需要在很多文件上使用它,你应该使用另一种解析方法。
$html = file_get_contents("my_file.html");
$json = substr($html, strpos($html, '[') , strpos($html, ']') - (strpos($html, '[')-1));
$json = str_replace("'", "\"", $json);
json_decode
将您的json转换为php数组。注意:您需要将第二个参数设置为true
才能使用“关联模式”: $my_array = json_decode($json, true);
在这里,当你执行var_dump($my_array)
时,你会发现所有内容都保存在php数组中:
array(5) {
[0]=>
array(3) {
["label"]=>
string(5) "A (2)"
["complete"]=>
float(2)
["pending"]=>
float(0)
}
[1]=>
array(3) {
["label"]=>
string(6) " B (8)"
["complete"]=>
int(8)
["pending"]=>
float(0)
}
...
]
答案 2 :(得分:0)
使用 PHP Simple HTML DOM Parser ,您可以执行以下操作,将label
data
内的DOM object
值解析为变量。
使用以下方法之一创建// Create a DOM object from a string
$html = str_get_html('<html><body>Hello!</body></html>');
// Create a DOM object from a URL
$html = file_get_html('http://www.google.com/');
// Create a DOM object from a HTML file
$html = file_get_html('test.htm');
URL
您选择哪一个取决于您的情况,因为我不知道您是从file
或文件string
甚至DOM object
获取的,我认为我列出了它们所有。但这无关紧要。
现在,如果您设置了// save the second occurrence of script tag in $ret.
$ret = $html->find('script', 1);
// use preg_match_all to find what you are looing for,
// you might want to adjust the regex to fit your needs, but this will work for now.
preg_match_all("/\"label\"\s*:\s*([^}]+)/", $ret, $out);
// know loop over matched result and adjust the string to be parsed to a variable.
foreach($out[1] as $key => $value) {
$out[1][$key] = str_replace([' ','(',')','"'],['','=','',''] , substr($value, 0, strpos($value, ',')));
parse_str($out[1][$key]);
}
// now you can do:
print_r($A); // 2
print_r($B); // 8
print_r($C); // 10
print_r($D); // 18
print_r($E); // 21
,请执行以下操作。
ternary
希望有所帮助。