Lots of things can cause this. The most likely are:
(a) Your XSLT processor might not support disable-output-escaping (it's an optional and deprecated feature)
(b) You might be sending the XSLT output to a destination other than a serializer (for example, to a DOM tree)
Really, you shouldn't be using disable-output-escaping. 90% of the time it's only used by people who really haven't mastered the right way to do things in XSLT.
LATER
As is clear from the latest update your post, you are using transformToDoc, which writes the XSLT result tree to a DOM; you are then serializing the DOM using doc->formatOutput which uses the DOM serializer rather than the XSLT serializer; this has no knowledge of the disable output escaping attributes in the XSLT.
(The documentation at http://php.net/manual/en/xsltprocessor.transformtodoc.php has a user-contributed comment pointing out that it's usually better to use transformToXML because that way, the XSLT processor gets to control the output format.)
I don't know anything much about the native PHP XSLT processor but the same problem occurs with other language environments.
Incidentally, you might like to know that XSLT 3.0 is now available for the PHP environment via the Saxon/C product (see www.saxonica.com). One of the reasons people resort to disable-output-escaping
in XSLT 1.0 is because XSLT 1.0 doesn't provide easy ways to do grouping. This is fixed in later XSLT versions but unfortunately the PHP XSLTProcessor was never updated.