Я работал над этими тегами tidy-up-messy-html с DOM, но теперь я осознаю большую проблему:
$content = '<p><a href="#">this is a link</a></p>';
function tidy_html($content,$allowable_tags = null, $span_regex = null)
{
$dom = new DOMDocument();
$dom->loadHTML($content);
// other codes
return $dom->saveHTML();
}
echo tidy_html($content);
Он выведет весь DOM,
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body><p><a href="#">this is a link</a></p></body></html>
но я хочу только что-то подобное в ответе,
<p><a href="#">this is a link</a></p>
Я не хочу,
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><body>...</body></html>
Возможно ли это?
РЕДАКТИРОВАТЬ:
симуляция innerHTML
генерирует некоторые странные коды в моей базе данных, такие как
, Â
, ’
<p>Monday July 5th 10am - 3.30pm £20</p>
<p>Be one of the first visitors to the ...at this special event.Â</p>
<p>All participants will receive a free copy of the ‘Contemporary Art Kit’ produced exclusively for Art on....</p>
innerHTML
симуляция,
$innerHHTML = '';
$nodeBody = $dom->getElementsByTagName('body')->item(0);
foreach($nodeBody->childNodes as $child) {
$innerHTML .= $nodeBody->ownerDocument->saveXML($child);
}
Я обнаружил, что причина, по которой он создает странные коды при разрыве, вызвана saveXML($child)
Поэтому, когда у меня что-то подобное,
$content = '<p><br/><a href="#">xx</a></p>
<p><br/><a href="#">xx</a></p>';
Будет возвращено что-то вроде этого,
<p><a href="#">xx</a></p>
<p><a href="#">xx</a></p>
Но я хочу что-то такое на самом деле,
<p><a href="#">xx</a></p>
<p><a href="#">xx</a></p>