前提・実現したいこと
JavaScriptの連想配列オブジェクトとしては有効な形式を、PHPでも有効な形式にデコードしたいです。
PHPではダブルクオートで囲まれていないとjson_decodeが効かないなどのルールがあると思うのですが、そういった点をクリアしたいです。
該当のソースコード
まず次のHTMLが与えられます。ここからjsObjを取得し、PHPで各値を取得していきたいわけです。
<!DOCTYPE html> <html> <head> <title></title> <meta name="color" content="#fff"> <script type="text/javascript"> var jsObj = { // comment id: 123, current: {"type":"get","id":111}, is_clear: null, date: {'created':"It's hard things"}, has: true, info: [{url:null,"bool":false,}], from: "page", url: "http://example.com" + "/page/a", item: "pc", // xxx: note - please help me }; </script> </head> <body> <p>This is page</p> </body> </html>
試したこと
jsObj の取得は以下でできそうです。
php
1$jsObj = ''; 2$html = '上記HTMLが入る'; 3$doc = new DOMDocument(); 4$doc->loadHTML($html); 5$script_tags = $doc->getElementsByTagName('script'); 6for ($i = 0; $i < $script_tags->length; $i++) { 7 $script = trim( $script_tags->item($i)->nodeValue ); 8 $key = 'jsObj'; 9 if( preg_match( "[var\s$key\s=\s(.+)]", $script, $matches ) ){ 10 $jsObj = $matches[1]; 11 } 12} 13var_dump($jsObj);
あとは以下のように、art_idなどの必要値を取得していきたいわけですが、コメントにあるようにうまくいかないわけです。
php
1$jsObj= json_decode($jsObj,true); // ダブルクオートで囲まれていないなどPHP側のルールに準拠していないためNULLとなる 2echo $jsObj["id"] ?? "値がない"; // "123" がほしいが "値がない" がechoされてしまう

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/16 11:25
退会済みユーザー
2020/08/16 12:49
2020/08/16 13:11