I\'m trying to parse some HTML that includes some HTML entities, like ×
$str = \' A × B\';
$do
I am facing the same problem, in fact, utf8_encode and deccode do the trick for some cases but not all of them, for example Σ
can not be rendered using utf-8 decode function, the basic idea which we need is to keep html entities as they are in the string.
This is no direct answer to the question, but you may use UTF-8 instead, which allows you to save glyphs like ÷ or × directly. To use UTF-8 with PHP DOM on the other needs a little hack.
Also, if you are trying to display mathematical formulas (as A × B suggests) have a look at MathML.
From the docs:
The DOM extension uses UTF-8 encoding.
Use utf8_encode() and utf8_decode() to work with texts in ISO-8859-1 encoding or Iconv for other encodings.
Assuming you're using latin-1 try:
<?php
header('Content-type:text/html;charset=iso-8859-1');
$str = utf8_encode('<a href="http://example.com/"> A × B</a>');
$dom = new DOMDocument;
$dom -> substituteEntities = false;
$dom ->loadHTML($str);
$link = $dom ->getElementsByTagName('a') -> item(0);
$fullname = utf8_decode($link -> nodeValue);
$href = $link -> getAttribute('href');
echo "
fullname: $fullname \n
href: $href\n"; ?>
Are you sure the & is being substituted to &
? If that were the case, you'd see the exact entity, as text, not the garbled response you're getting.
My guess is that it is converted to the actual character, and you're viewing the page with a latin1 charset, which does not contain this character, hence the garbled response.
If I render your example, my output is:
fullname: A × B
href: http://example.com/
When viewing this in latin1/iso-8859-1, I see the output you're describing. But when I set the charset to UTF-8, the output is fine.