我正在尝试获取html标记属性的内容,但不知怎的,我无法获得所有内容:
示例html
// clipped for brevity
<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">
// some more html
现在我想得到奇怪使用双引号的json对象的所有内容。出于这个原因,我试图先得到data
属性的值,然后再解析json。
我做了:
preg_match('/< *a[^>]*data-custom *= *["\']?([^"\']*)/i', $re, $matches);
var_dump($matches);
其中$re
是上面显示的html。但我得到了这个:
array(2) {
[0]=> string(39) "<a href="someurl/somemore" data-vote="{"
[1]=> string(1) "{"
你怎么看?此外,如果你碰巧知道以更快的方式提取json值的直接方法,你会怎么做?
答案 0 :(得分:1)
这是有效的,除非您的链接有更多内容......
$str = '<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">';
preg_match('/< *a[^>]*data-custom=(.*)>/i', $str, $matches);
var_dump($matches);
输出:
array(2) {
[0]=>
string(69) "<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}">"
[1]=>
string(29) ""{"foo": 0, "bar": "string"}""
}
答案 1 :(得分:1)
可以尝试以下内容:
$html = '<a href="someurl/somemore" data-custom="{"foo": 0, "bar": "string"}" class="btn">Vote</a>';
preg_match('~\{\s*(.*?)\s*\}~', $html, $m);
$json = $m[0];
print $json;
<强>输出:强>
{"foo": 0, "bar": "string"}