Я получаю HTML-код одной страницы через phpQuery, а затем получаю строковый код из тега script в голове через php regex:
var BASE_DATA = {
userInfo: {
id: 0,
userName: 'no-needed',
avatarUrl: 'no-needed',
isPgc: false,
isOwner: false
},
headerInfo: {
id: 0,
isPgc: false,
userName: 'no-needed',
avatarUrl: 'no-needed',
isHomePage: false,
crumbTag: 'no-needed',
hasBar: true
},
articleInfo:
{
title: 'needed',
content: 'needed',
groupId: 'needed',
itemId: 'needed',
type: 1,
subInfo: {
isOriginal: false,
source: 'needed',
time: 'needed'
},
tagInfo: {
tags: [{"name":"no-needed 1"},{"name":"no-needed 2"},{"name":"no-needed 3"}],
groupId: 'no-needed',
itemId: 'no-needed',
repin: 0,
},
has_extern_link: 0,
coverImg: 'no-needed'
},
commentInfo:
{
groupId: 'no-needed',
itemId: 'no-needed',
comments_count: 151,
ban_comment: 0
},};
Я хочу преобразовать эту строку в массив php, например:
$base_data = array(
'articleInfo' => array(
'title' => 'needed',
'content' => 'needed',
'groupId' => 'needed',
'itemId' => 'needed',
'subInfo' => array(
'source' => 'needed',
'time' => 'needed',
),
));
или
$base_data = array(
'title' => 'needed',
'content' => 'needed',
'groupId' => 'needed',
'itemId' => 'needed',
'subInfo' => array(
'source' => 'needed',
'time' => 'needed',
),);
Я уже пытался многими способами, такими как: json_decode, получать содержимое из фигурных скобок через php regex и функцию preg_match_all. Но все они работают не очень хорошо.
Я пробовал два способа:
первый путь:
$json = str_ireplace(array('var BASE_DATA =', '};'), array('', '}'), $js);
json_decode($json, true);
второй путь:
preg_match_all('/\{([^}]+)\}/', $js, $matches);
print_r($matches[1]);
или
preg_match_all('/articleInfo:\s*\{([^}]+)\}/', $script_text, $matches);
print_r($matches[1][0]);
Кажется, что он близок к завершению, но все равно выглядит не очень хорошо, мне нужно разобрать строку в статье articleInfo .... именно поэтому я разместил этот пост.
Я даже хотел использовать движок V8 JavaScript, но .....
Кто-нибудь знает лучший способ закончить его, пожалуйста?