|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2011-03-31 06:23 UTC] ken at smallboxcms dot com
Description:
------------
This one has annoyed me for a long time. When you load HTML useing loadHTML you get extra CDATA tags on the script tags causing browser errors. This does not happen when loadXML is used.
Test script:
---------------
<?php
$foo = '
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
//<![CDATA[
alert("foo bar");
//]]>
</script>
</body>
</html>
';
$dom = new domDocument('1,0', 'utf-8');
$dom->loadHTML($foo);
echo $dom->saveXML();
?>
Expected result:
----------------
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title/></head><body>
<script type="text/javascript">
//<![CDATA[
alert("foo bar");
//]]>
</script></body></html>
Actual result:
--------------
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><title/></head><body>
<script type="text/javascript"><![CDATA[
//<![CDATA[
alert("foo bar");
//]]]]><![CDATA[>
]]></script></body></html>
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Fri Oct 24 13:00:02 2025 UTC |
Here is a userland workaround: $list = $dom->getElementsByTagName('script'); foreach ($list as $script) { if ($script->childNodes->length && $script->firstChild->nodeType == 4) { $cdata = $script->removeChild($script->firstChild); $text = $dom->createTextNode($cdata->nodeValue); $script->appendChild($text); } }