diff --git a/core/composer.lock b/core/composer.lock
index d5aee6c9c5c36f778860a96ff5b2f16786433010..98265d4dfe1ec27a561b72085f5de325aded8b6c 100644
--- a/core/composer.lock
+++ b/core/composer.lock
@@ -957,16 +957,16 @@
         },
         {
             "name": "masterminds/html5",
-            "version": "2.1.0",
+            "version": "2.1.2",
             "source": {
                 "type": "git",
                 "url": "https://github.com/Masterminds/html5-php.git",
-                "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704"
+                "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
-                "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
+                "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/8f782e0f01a6e33a319bdc8f6de9cfd6569979a4",
+                "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4",
                 "shasum": ""
             },
             "require": {
@@ -1018,7 +1018,7 @@
                 "serializer",
                 "xml"
             ],
-            "time": "2015-02-09 16:26:00"
+            "time": "2015-06-07 08:43:18"
         },
         {
             "name": "mikey179/vfsStream",
diff --git a/core/vendor/composer/ClassLoader.php b/core/vendor/composer/ClassLoader.php
index 4e05d3b158348d499092a409f7beec47328946da..5e1469e8307d9c644831f694ed8eccdd4afccc28 100644
--- a/core/vendor/composer/ClassLoader.php
+++ b/core/vendor/composer/ClassLoader.php
@@ -351,7 +351,7 @@ private function findFileWithExtension($class, $ext)
             foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) {
                 if (0 === strpos($class, $prefix)) {
                     foreach ($this->prefixDirsPsr4[$prefix] as $dir) {
-                        if (is_file($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) {
                             return $file;
                         }
                     }
@@ -361,7 +361,7 @@ private function findFileWithExtension($class, $ext)
 
         // PSR-4 fallback dirs
         foreach ($this->fallbackDirsPsr4 as $dir) {
-            if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) {
                 return $file;
             }
         }
@@ -380,7 +380,7 @@ private function findFileWithExtension($class, $ext)
             foreach ($this->prefixesPsr0[$first] as $prefix => $dirs) {
                 if (0 === strpos($class, $prefix)) {
                     foreach ($dirs as $dir) {
-                        if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+                        if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                             return $file;
                         }
                     }
@@ -390,7 +390,7 @@ private function findFileWithExtension($class, $ext)
 
         // PSR-0 fallback dirs
         foreach ($this->fallbackDirsPsr0 as $dir) {
-            if (is_file($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
+            if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr0)) {
                 return $file;
             }
         }
diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php
deleted file mode 100644
index dab4af10a2bf6dd178e5b92787a2c01c24042a07..0000000000000000000000000000000000000000
--- a/core/vendor/composer/include_paths.php
+++ /dev/null
@@ -1,10 +0,0 @@
-<?php
-
-// include_paths.php @generated by Composer
-
-$vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname($vendorDir);
-
-return array(
-    $vendorDir . '/phpunit/php-text-template',
-);
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index d77003b2645ba6fdee4d3121a0792c4ea2994fcb..94733abcb6bfedcf8b1bf5c10e0c7548a4ed9609 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -265,73 +265,6 @@
             "testing"
         ]
     },
-    {
-        "name": "masterminds/html5",
-        "version": "2.1.0",
-        "version_normalized": "2.1.0.0",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/Masterminds/html5-php.git",
-            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
-            "reference": "a10f8d392e1aad0b500f7b440c8f0d3bc9189704",
-            "shasum": ""
-        },
-        "require": {
-            "ext-libxml": "*",
-            "php": ">=5.3.0"
-        },
-        "require-dev": {
-            "phpunit/phpunit": "4.*",
-            "sami/sami": "~2.0",
-            "satooshi/php-coveralls": "0.6.*"
-        },
-        "time": "2015-02-09 16:26:00",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "2.1-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-4": {
-                "Masterminds\\": "src"
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Matt Butcher",
-                "email": "technosophos@gmail.com"
-            },
-            {
-                "name": "Asmir Mustafic",
-                "email": "goetas@gmail.com"
-            },
-            {
-                "name": "Matt Farina",
-                "email": "matt@mattfarina.com"
-            }
-        ],
-        "description": "An HTML5 parser and serializer.",
-        "homepage": "http://masterminds.github.io/html5-php",
-        "keywords": [
-            "HTML5",
-            "dom",
-            "html",
-            "parser",
-            "querypath",
-            "serializer",
-            "xml"
-        ]
-    },
     {
         "name": "sebastian/diff",
         "version": "1.3.0",
@@ -3483,5 +3416,72 @@
         "keywords": [
             "stack"
         ]
+    },
+    {
+        "name": "masterminds/html5",
+        "version": "2.1.2",
+        "version_normalized": "2.1.2.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/Masterminds/html5-php.git",
+            "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/Masterminds/html5-php/zipball/8f782e0f01a6e33a319bdc8f6de9cfd6569979a4",
+            "reference": "8f782e0f01a6e33a319bdc8f6de9cfd6569979a4",
+            "shasum": ""
+        },
+        "require": {
+            "ext-libxml": "*",
+            "php": ">=5.3.0"
+        },
+        "require-dev": {
+            "phpunit/phpunit": "4.*",
+            "sami/sami": "~2.0",
+            "satooshi/php-coveralls": "0.6.*"
+        },
+        "time": "2015-06-07 08:43:18",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "2.1-dev"
+            }
+        },
+        "installation-source": "dist",
+        "autoload": {
+            "psr-4": {
+                "Masterminds\\": "src"
+            }
+        },
+        "notification-url": "https://packagist.org/downloads/",
+        "license": [
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Matt Butcher",
+                "email": "technosophos@gmail.com"
+            },
+            {
+                "name": "Asmir Mustafic",
+                "email": "goetas@gmail.com"
+            },
+            {
+                "name": "Matt Farina",
+                "email": "matt@mattfarina.com"
+            }
+        ],
+        "description": "An HTML5 parser and serializer.",
+        "homepage": "http://masterminds.github.io/html5-php",
+        "keywords": [
+            "HTML5",
+            "dom",
+            "html",
+            "parser",
+            "querypath",
+            "serializer",
+            "xml"
+        ]
     }
 ]
diff --git a/core/vendor/masterminds/html5/.travis.yml b/core/vendor/masterminds/html5/.travis.yml
index 5b31d71b1d97a54a4c0cce1f58a5a88125b8c5a8..2ccb5634b3ba3168c06e01853a1fcde0f644b4e4 100644
--- a/core/vendor/masterminds/html5/.travis.yml
+++ b/core/vendor/masterminds/html5/.travis.yml
@@ -12,13 +12,14 @@ php:
   - 5.5
   - 5.6
   - hhvm
+  - nightly
 
 notifications:
   irc: "irc.freenode.net#masterminds"
 
 before_script:
   - composer self-update
-  - composer install --dev
+  - composer install
 
 script:
   - mkdir -p build/logs
diff --git a/core/vendor/masterminds/html5/CREDITS b/core/vendor/masterminds/html5/CREDITS
index 59c87a2353873e0346afa4539306510572abaae6..c2dbc4b64a9cf7e6b6a4826b3a872c7ca1210152 100644
--- a/core/vendor/masterminds/html5/CREDITS
+++ b/core/vendor/masterminds/html5/CREDITS
@@ -7,5 +7,5 @@ Kukhar Vasily [ngreduce] <ngreduce@gmail.com> (contributor)
 Rune Christensen [MrElectronic] <mrelectronic@example.com> (contributor)
 Mišo Belica [miso-belica] <miso-belica@example.com> (contributor)
 Asmir Mustafic [goetas] <goetas@example.com> (contributor)
-KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor)
+KITAITI Makoto [KitaitiMakoto] <KitaitiMakoto@example.com> (contributor) 
 Jacob Floyd [cognifloyd] <cognifloyd@gmail.com> (contributor)
diff --git a/core/vendor/masterminds/html5/LICENSE.txt b/core/vendor/masterminds/html5/LICENSE.txt
index 93d60ed43fe89c2faff5f2e9c155cce5a3b60208..3c275b54a75ea01f2bffafe0e24e1ecde80b5bf6 100644
--- a/core/vendor/masterminds/html5/LICENSE.txt
+++ b/core/vendor/masterminds/html5/LICENSE.txt
@@ -7,8 +7,8 @@ Matt Farina - matt@mattfarina.com
 Asmir Mustafic - goetas@gmail.com
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 the Software, and to permit persons to whom the Software is furnished to do so,
 subject to the following conditions:
@@ -49,8 +49,8 @@ The Mozilla Foundation (contributions from Henri Sivonen since 2008)
 David Flanagan (Mozilla) - dflanagan@mozilla.com
 
 Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
+this software and associated documentation files (the "Software"), to deal in 
+the Software without restriction, including without limitation the rights to 
 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
 the Software, and to permit persons to whom the Software is furnished to do so,
 subject to the following conditions:
diff --git a/core/vendor/masterminds/html5/README.md b/core/vendor/masterminds/html5/README.md
index db2abb702b3a3006019edecdd5d6f96ad0154984..bbe003f6e61e3d02784a21cb84e0dccca02834c2 100644
--- a/core/vendor/masterminds/html5/README.md
+++ b/core/vendor/masterminds/html5/README.md
@@ -36,7 +36,7 @@ install.
 
 ## Basic Usage
 
-HTML5-PHP has a high-level API and a low-level API.
+HTML5-PHP has a high-level API and a low-level API. 
 
 Here is how you use the high-level `HTML5` library API:
 
@@ -101,7 +101,7 @@ The following options are supported:
 * `disable_html_ns` (boolean): Prevents the parser from automatically
   assigning the HTML5 namespace to the DOM document. This is for
   non-namespace aware DOM tools.
-* `target_doc` (\DOMDocument): A DOM document that will be used as the
+* `target_document` (\DOMDocument): A DOM document that will be used as the
   destination for the parsed nodes.
 * `implicit_namespaces` (array): An assoc array of namespaces that should be
   used by the parser. Name is tag prefix, value is NS URI.
@@ -144,14 +144,14 @@ The serializer is broken into three parts:
 
 - The `OutputRules` contain the rules to turn DOM elements into strings. The
 rules are an implementation of the interface `RulesInterface` allowing for
-different rule sets to be used.
+different rule sets to be used. 
 - The `Traverser`, which is a special-purpose tree walker. It visits
 each node node in the tree and uses the `OutputRules` to transform the node
 into a string.
 - `HTML5` manages the `Traverser` and stores the resultant data
 in the correct place.
 
-The serializer (`save()`, `saveHTML()`) follows the
+The serializer (`save()`, `saveHTML()`) follows the 
 [section 8.9 of the HTML 5.0 spec](http://www.w3.org/TR/2012/CR-html5-20121217/syntax.html#serializing-html-fragments).
 So tags are serialized according to these rules:
 
@@ -166,8 +166,8 @@ issues known issues that are not presently on the roadmap:
 
 - Namespaces: HTML5 only [supports a selected list of namespaces](http://www.w3.org/TR/html5/infrastructure.html#namespaces)
   and they do not operate in the same way as XML namespaces. A `:` has no special
-  meaning.
-  By default the parser does not support XML style namespaces via `:`;
+  meaning. 
+  By default the parser does not support XML style namespaces via `:`; 
   to enable the XML namespaces see the  [XML Namespaces section](#xml-namespaces)
 - Scripts: This parser does not contain a JavaScript or a CSS
   interpreter. While one may be supplied, not all features will be
@@ -184,13 +184,13 @@ issues known issues that are not presently on the roadmap:
   * Per the spec, many legacy tags are admitted and correctly handled,
     even though they are technically not part of HTML5.
 - Attribute names and values: Due to the implementation details of the
-  PHP implementation of DOM, attribute names that do not follow the
+  PHP implementation of DOM, attribute names that do not follow the 
   XML 1.0 standard are not inserted into the DOM. (Effectively, they
   are ignored.) If you've got a clever fix for this, jump in!
 - Processor Instructions: The HTML5 spec does not allow processor
   instructions. We do. Since this is a server-side library, we think
   this is useful. And that means, dear reader, that in some cases you
-  can parse the HTML from a mixed PHP/HTML document. This, however,
+  can parse the HTML from a mixed PHP/HTML document. This, however, 
   is an incidental feature, not a core feature.
 - HTML manifests: Unsupported.
 - PLAINTEXT: Unsupported.
diff --git a/core/vendor/masterminds/html5/RELEASE.md b/core/vendor/masterminds/html5/RELEASE.md
index 36d16305821ed0c2209a2d7eea9a1bc4fdf21dbb..e3d70d386e93c909f4297fea199b44934d20b8ad 100644
--- a/core/vendor/masterminds/html5/RELEASE.md
+++ b/core/vendor/masterminds/html5/RELEASE.md
@@ -1,4 +1,10 @@
 # Release Notes
+2.1.2 (2015-06-07)
+- #82: Support for PHP7
+- #84: Improved boolean attribute handling 
+
+2.1.1 (2015-03-23)
+- #78: Fixes bug where unmatched entity like string drops everything after &.
 
 2.1.0 (2015-02-01)
 - #74: Added `disable_html_ns` and `target_doc` dom parsing options
diff --git a/core/vendor/masterminds/html5/UPGRADING.md b/core/vendor/masterminds/html5/UPGRADING.md
index e3e562d1c4bf00b43e20041aab7cd81e402d0bd0..76e3a19bc1d5ef4773c3ee8ee6b2dddf6e3d46c2 100644
--- a/core/vendor/masterminds/html5/UPGRADING.md
+++ b/core/vendor/masterminds/html5/UPGRADING.md
@@ -2,19 +2,19 @@ From 1.x to 2.x
 =================
 
 - All classes uses `Masterminds` namespace.
-- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed.
+- All public static methods has been removed from `HTML5` class and the general API to access the HTML5 functionalities has changed. 
 
     Before:
-
+    
         $dom = \HTML5::loadHTML('<html>....');
         \HTML5::saveHTML($dom);
-
+        
     After:
 
         use Masterminds\HTML5;
-
+        
         $html5 = new HTML5();
-
+        
         $dom = $html5->loadHTML('<html>....');
         echo $html5->saveHTML($dom);
 
diff --git a/core/vendor/masterminds/html5/phpunit.xml.dist b/core/vendor/masterminds/html5/phpunit.xml.dist
index b42903a989d3a2613dfb49042e07d4bdb8991216..c34488018dde26132746a6604baadab44c4830aa 100644
--- a/core/vendor/masterminds/html5/phpunit.xml.dist
+++ b/core/vendor/masterminds/html5/phpunit.xml.dist
@@ -11,7 +11,7 @@
             <file>src/HTML5/Parser/InputStream.php</file>
             <file>src/HTML5/Serializer/RulesInterface.php</file>
             <file>src/HTML5/Entities.php</file>
-            <file>src/HTML5/Serializer/HTML5Entities.php</file>
+            <file>src/HTML5/Serializer/HTML5Entities.php</file> 
         </blacklist>
     </filter>
     <logging>
diff --git a/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php b/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
index e00b9a2e2b6cc8100f614248812e84383e6afd0d..a779191a43dc4f6cb9e73dec0a903dc02b0991bd 100644
--- a/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
+++ b/core/vendor/masterminds/html5/src/HTML5/Parser/Tokenizer.php
@@ -1065,8 +1065,14 @@ protected function decodeCharacterReference($inAttribute = false)
             // [a-zA-Z0-9]+;
             $cname = $this->scanner->getAsciiAlpha();
             $entity = CharacterReference::lookupName($cname);
+
+            // When no entity is found provide the name of the unmatched string
+            // and continue on as the & is not part of an entity. The & will
+            // be converted to &amp; elsewhere.
             if ($entity == null) {
-                $this->parseError("No match in entity table for '%s'", $entity);
+                $this->parseError("No match in entity table for '%s'", $cname);
+                $this->scanner->unconsume($this->scanner->position() - $start);
+                return '&';
             }
         }
 
diff --git a/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php b/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
index c009698d8e1046fcbbbd06db8961f425b92acd97..4ad74f6b5d8dfe7cd9fd7617fc4263a099fd3a3c 100644
--- a/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
+++ b/core/vendor/masterminds/html5/src/HTML5/Serializer/OutputRules.php
@@ -73,17 +73,86 @@ class OutputRules implements \Masterminds\HTML5\Serializer\RulesInterface
 
             'nodeName'=>'img', 'nodeName'=>array('img', 'a'),
             'attrName'=>'alt', 'attrName'=>array('title', 'alt'),
-
-
-            'prefixes'=>['xh'=>'http://www.w3.org/1999/xhtml'),
-            'xpath' => "@checked[../../xh:input[@type='radio' or @type='checkbox']]",
         ),
         */
         array(
-            'nodeNamespace'=>'http://www.w3.org/1999/xhtml',
-            'attrName'=>array('alt', 'title'),
+            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
+            'attrName' => array('href',
+                'hreflang',
+                'http-equiv',
+                'icon',
+                'id',
+                'keytype',
+                'kind',
+                'label',
+                'lang',
+                'language',
+                'list',
+                'maxlength',
+                'media',
+                'method',
+                'name',
+                'placeholder',
+                'rel',
+                'rows',
+                'rowspan',
+                'sandbox',
+                'spellcheck',
+                'scope',
+                'seamless',
+                'shape',
+                'size',
+                'sizes',
+                'span',
+                'src',
+                'srcdoc',
+                'srclang',
+                'srcset',
+                'start',
+                'step',
+                'style',
+                'summary',
+                'tabindex',
+                'target',
+                'title',
+                'type',
+                'value',
+                'width',
+                'border',
+                'charset',
+                'cite',
+                'class',
+                'code',
+                'codebase',
+                'color',
+                'cols',
+                'colspan',
+                'content',
+                'coords',
+                'data',
+                'datetime',
+                'default',
+                'dir',
+                'dirname',
+                'enctype',
+                'for',
+                'form',
+                'formaction',
+                'headers',
+                'height',
+                'accept',
+                'accept-charset',
+                'accesskey',
+                'action',
+                'align',
+                'alt',
+                'bgcolor',
+            ),
+        ),
+        array(
+            'nodeNamespace' => 'http://www.w3.org/1999/xhtml',
+            'xpath' => 'starts-with(local-name(), \'data-\')',
         ),
-
     );
 
     const DOCTYPE = '<!DOCTYPE html>';
@@ -328,7 +397,7 @@ protected function nonBooleanAttribute(\DOMAttr $attr)
                         $xp->registerNamespace($nsPrefix, $ns);
                     }
                 }
-                if(!$xp->query($rule['xpath'], $attr->ownerElement)->length){
+                if(!$xp->evaluate($rule['xpath'], $attr)){
                     continue;
                 }
             }
diff --git a/core/vendor/masterminds/html5/test/HTML5/Html5Test.php b/core/vendor/masterminds/html5/test/HTML5/Html5Test.php
index a1a6c9cb6297e4678d90f96668281207f97b59c3..cce58b70bf0efec64b249b05a8eeab6c90fbf36b 100644
--- a/core/vendor/masterminds/html5/test/HTML5/Html5Test.php
+++ b/core/vendor/masterminds/html5/test/HTML5/Html5Test.php
@@ -376,6 +376,9 @@ public function testEntities()
 
         $res = $this->cycleFragment('<a>Apples &amp; bananas.</a>');
         $this->assertRegExp('|Apples &amp; bananas.|', $res);
+
+        $res = $this->cycleFragment('<p>R&D</p>');
+        $this->assertRegExp('|R&amp;D|', $res);
     }
 
     public function testComment()
diff --git a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
index 3c18039cacba425f3c85511026ff4cb69c25bb32..b2a2d398f5b9cf29d3de358b1d14c3cee3f44b76 100644
--- a/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
+++ b/core/vendor/masterminds/html5/test/HTML5/Parser/DOMTreeBuilderTest.php
@@ -100,7 +100,7 @@ public function testDocumentWithATargetDocument()
         $this->assertSame($doc, $targetDom);
         $this->assertEquals('html', $doc->documentElement->tagName);
     }
-
+    
     public function testDocumentFakeAttrAbsence()
     {
         $html = "<!DOCTYPE html><html xmlns=\"http://www.w3.org/1999/xhtml\"><body>foo</body></html>";
diff --git a/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php b/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..0e8555a9cc6c65068f91da6939d28c965397d3d1
--- /dev/null
+++ b/core/vendor/masterminds/html5/test/HTML5/Parser/UTF8UtilsTest.php
@@ -0,0 +1,26 @@
+<?php
+
+namespace Masterminds\HTML5\Tests\Parser;
+
+use Masterminds\HTML5\Parser\UTF8Utils;
+
+class UTF8UtilsTest extends \Masterminds\HTML5\Tests\TestCase
+{
+	public function testConvertToUTF8() {
+		$out = UTF8Utils::convertToUTF8('éàa', 'ISO-8859-1');
+		$this->assertEquals('éàa', $out);
+	}
+
+	/**
+	 * @todo add tests for invalid codepoints
+	 */
+	public function testCheckForIllegalCodepoints() {
+		$smoke = "Smoke test";
+		$err = UTF8Utils::checkForIllegalCodepoints($smoke);
+		$this->assertEmpty($err);
+
+		$data = "Foo Bar \0 Baz";
+		$errors = UTF8Utils::checkForIllegalCodepoints($data);
+		$this->assertContains('null-character', $errors);
+	}
+}
\ No newline at end of file
diff --git a/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php b/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php
index aa2e0c539cd95392269d037dfc4ef79e3eb6fd5d..72d1cd371305c50f16f58749fd6fa8d9c2d6373c 100644
--- a/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php
+++ b/core/vendor/masterminds/html5/test/HTML5/Serializer/OutputRulesTest.php
@@ -460,8 +460,10 @@ public function booleanAttributes()
             array('<input type="radio" readonly>'),
             array('<input type="radio" checked disabled>'),
             array('<input type="checkbox" checked disabled>'),
+            array('<input type="radio" value="" checked disabled>'),
+            array('<div data-value=""></div>'),
             array('<select disabled></select>'),
-            array('<div ng-app>foo</div>'),
+            array('<div ng-app></div>'),
             array('<script defer></script>'),
         );
     }
@@ -482,7 +484,11 @@ public function testBooleanAttrs($html)
         $m->invoke($r, $node);
 
         $content = stream_get_contents($stream, - 1, 0);
-        $this->assertContains($content, $html);
+
+        $html = preg_replace('~<[a-z]+(.*)></[a-z]+>~', '\1', $html);
+        $html = preg_replace('~<[a-z]+(.*)/?>~', '\1', $html);
+
+        $this->assertEquals($content, $html);
 
     }