Bug #70817 [Nab]: DOMDocument save removes html within a string
| From: | requinix@php.net | 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