From 76fdb2a2d6c2437af8bb3bafeb09a11b9a29d3a4 Mon Sep 17 00:00:00 2001 From: Hamish Friedlander Date: Wed, 20 Feb 2013 10:56:52 +1300 Subject: [PATCH] FIX ShortcodeParser#parse in < PHP 5.3.6 where saveHTML doesnt take arg --- parsers/ShortcodeParser.php | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/parsers/ShortcodeParser.php b/parsers/ShortcodeParser.php index 6d7e07bd0..c14035839 100644 --- a/parsers/ShortcodeParser.php +++ b/parsers/ShortcodeParser.php @@ -481,6 +481,25 @@ class ShortcodeParser { return $bases; } + protected function saveHTML($doc) { + if (version_compare(PHP_VERSION, '5.3.6', '>=')){ + $res = ''; + foreach($doc->firstChild->childNodes as $child) $res .= $doc->saveHTML($child); + } + else { + $res = preg_replace( + array( + '/^(.*?)/is', + '/<\/html>(.*?)$/is', + ), + '', + $doc->saveHTML() + ); + } + + return $res; + } + /** * Parse a string, and replace any registered shortcodes within it with the result of the mapped callback. * @@ -511,9 +530,7 @@ class ShortcodeParser { } } - $res = ''; - $container = $bases->item(0)->parentNode; - $doc = $container->ownerDocument; + $doc = $bases->item(0)->ownerDocument; $xp = new DOMXPath($doc); @@ -550,9 +567,7 @@ class ShortcodeParser { $this->replaceMarkerWithContent($shortcode, $tag); } - foreach($container->childNodes as $child) $res .= $doc->saveHTML($child); - - return $res; + return $this->saveHTML($doc); }