Bug #70817 [Nab]: DOMDocument save removes html within a string

From: Date: Wed, 27 Jun 2018 11:49:04 +0000
Subject: Bug #70817 [Nab]: DOMDocument save removes html within a string
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-215990@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=70817&edit=1 ID: 70817 Updated by: requinix@php.net Reported by: untuned20 at gmail dot com Summary: DOMDocument save removes html within a string Status: Not a bug Type: Bug Package: DOM XML related Operating System: Linux PHP Version: 5.6.14 Block user comment: N Private report: N New Comment: Technically loadHTML() is more appropriate, however the parser follows HTML 4 rules which say that you can't put a </ in there. https://www.w3.org/TR/html4/appendix/notes.html#notes-specifying-data Previous Comments: ------------------------------------------------------------------------ [2018-06-27 10:24:20] googleguy@php.net Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php This works as expected in all current supported versions of PHP: https://3v4l.org/UEDIL ------------------------------------------------------------------------ [2018-06-27 10:16:23] alexeyseliverstov dot dev at gmail dot com Just tried using this with PHP 7.1 on Ubuntu 16.04. For some reason, closing html tags inside the script tag are deleted. This is the warning that appears when I try to execute the code example: "Warning: DOMDocument::loadHTML(): Unexpected end tag : h1 in Entity, line: 6 in Standard input code on line 5" ------------------------------------------------------------------------ [2015-10-30 00:49:11] untuned20 at gmail dot com The above test script is wrong, it should be loadHTML() instead. Test script: --------------- <?php $doc = new DOMDocument(); $doc->loadHTML('<html> <head> </head> <body> <script> console.log("<h1>hello</h1>"); </script> </body> </html>'); echo $doc->saveHTML(); ------------------------------------------------------------------------ [2015-10-30 00:44:37] untuned20 at gmail dot com Description: ------------ When parsing a DOMDocument(), strings containing html are validated and probably shouldn't be. For example when parsing a <script> tag containing html to be executed, the parser will validate that html. In the example script, The parser removes the </h1> leaving an invalid string of "<h1>hello". Test script: --------------- <?php $doc = new DOMDocument(); $doc->loadXML('<html> <head> </head> <body> <script> console.log("<h1>hello</h1>"); </script> </body> </html>'); echo $doc->saveHTML(); Expected result: ---------------- <html> <head> </head> <body> <script> console.log("<h1>hello</h1>"); </script> </body> </html> Actual result: -------------- <html> <head> </head>r <body> <script> console.log("<h1>hello"); </script> </body> </html> ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=70817&edit=1

« previous php.bugs (#215990) next »