3v4l.org

run code in 500+ PHP versions simultaneously
<?php $input = <<<INPUT <p>Foo?</p> [[{ &quot;fid&quot;:&quot;123456&quot;,&quot;view_mode&quot;:&quot;default&quot;,&quot;type&quot;:&quot;media&quot;,&quot;attributes&quot;:{ &quot;class&quot;:&quot;css-class1 css-class2 css-class3&quot; ,&quot;alt&quot;:&quot;Overridden alt attribute for embed&quot; ,&quot;title&quot;:&quot;Overridden title attribute for embed&quot; }, &quot;fields&quot;:{ &quot;format&quot;:&quot;default&quot; ,&quot;alt&quot;:&quot;Overridden alt attribute for embed&quot;,&quot;field_file_image_alt_text[und][0][value]&quot;:&quot;Media alt attribute&quot; ,&quot;title&quot;:&quot;Overridden title attribute for embed&quot;,&quot;field_file_image_title_text[und][0][value]&quot;:&quot;Media title attribute&quot;} }]] <p>Bar baz!</p> INPUT; $pattern = '/\[\[\s*(?<tag_info>\{.+\})\s*\]\]/sU'; $matches = []; var_dump(preg_match($pattern, $input, $matches)); var_dump($matches); $tag_info = $matches['tag_info']; var_dump('BEFORE'); var_dump(json_decode($tag_info)); function fix(string $parsed_potentially_broken_json): string { $r = str_replace("\n", " ", $parsed_potentially_broken_json); // This is what \Drupal\Component\Utility\Html::decodeEntities() does. return html_entity_decode($r, ENT_QUOTES, 'UTF-8'); } var_dump('AFTER'); var_dump(json_decode(fix($tag_info)));

preferences:
23.72 ms | 479 KiB | 4 Q