У меня этот html в строке:
$html = '<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>';
Затем я загружаю это в domDocument:
$doc = new DOMDocument("1.0","UTF-8");
@$doc->loadHTML($html);
Затем, когда я сбрасываю содержимое domDocument:
var_dump($doc->saveHTML());
Я осознаю:
<html><body><obj><p>Figure 1. different (<italic>p</italic></p></obj></body></html>
Итак, знак <и остальные исчезли.
Любая идея почему?
Спасибо.
Это будет печатать как xml
header("Content-type: text/xml; charset=utf-8");
$html = '<obj><p>Figure 1. different (<italic>p</italic>'. htmlspecialchars('< 0.05).') .'</p></obj>';
// Or else if you need this, then uncomment below line
//$html = htmlspecialchars('<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>');
$doc = new DOMDocument("1.0","UTF-8");
@$doc->loadHTML($html);
echo ($doc->saveHTML());
Ну, что <
используется разметкой html, поэтому строка html, которую вы публикуете, интерпретируется браузерами как html.
Если вы хотите показать литеральную разметку html, вам придется сбежать от нее или пометить ее как предварительно отформатированный текст в явном виде::
echo "<pre>\n";
var_dump($doc->saveHTML());
echo </pre\n";
Если вы хотите, чтобы html-разметка была интерпретирована, но просто выделили одиночные символы, вы должны сделать это явным образом, чтобы браузер мог отличить:
$html = '<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>';
var_dump($html);
<
здесь) должны быть экранированы при вставке в строку разметки. Теперь у вас есть «неверная» строка. Обычно такие строки создаются с использованием конструкций sprintf или аналогичных. Вот где должен произойти экранирование: экранировать все, что не является частью разметки (не только отдельные символы).
Парсер считает, что вы открываете новый тег HTML. Попробуйте использовать <
вместо.
$html = '<obj><p>Figure 1. different (<italic>p</italic>< 0.05).</p></obj>';
htmlspecialchars()
. Это скорее практическое неудобство. Вы также можете сделать что-то вроде этого: $html = '<obj><p>Figure 1. different (<italic>p</italic>' . htmlspecialchars("< 0.05).") . '</p></obj>';