2009-11-13 9 views
2

Мне было предложено, чтобы для закрытия некоторых «болтающихся» HTML-тегов мне нужно было использовать расширение DOM PHP и загрузитьHTML.Как использовать расширение DOM расширения PHPHTML

Я пытался какое-то время искать учебники, читая this page, пытаясь разными вещами, но не могу понять, как использовать его для выполнения того, что я хочу.

У меня есть эта строка: <div><p>The quick brown <a href="">fox jumps...

Мне нужно написать функцию, которая закрывает открытые HTML-теги.

Просто ищите отправную точку здесь. Обычно я могу быстро разобраться.

ответ

2

Может быть выполнено с классом DOMDocument в PHP с использованием методов DOMDocument::loadHTML() & DOMDocument::normalizeDocument().

<?php 
    $html = '<div><p>The quick brown <a href="">fox jumps'; 

    $DDoc = new DOMDocument(); 
    $DDoc->loadHTML($html); 
    $DDoc->normalizeDocument(); 

    echo $DDoc->saveHTML(); 
?> 

Выведет:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><div><p>The quick brown <a href="">fox jumps</a></p></div></body></html> 

Оттуда просто substr & strpos прочь HTML, что вы не хотите, например, так:

<?php 
    $html = '<div><p>The quick brown <a href="">fox jumps'; 

    $DDoc = new DOMDocument(); 
    $DDoc->loadHTML($html); 
    $DDoc->normalizeDocument(); 

    $html = $DDoc->saveHTML(); 

    # Remove Everything Before & Including The Opening HTML & Body Tags. 
    $html = substr($html, strpos($html, '<html><body>') + 12); 
    # Remove Everything After & Including The Closing HTML & Body Tags. 
    $html = substr($html, 0, -14); 

    echo $html; 
?> 
+0

Tidy не вариант для меня, но, надеюсь, кто-то найдет информацию полезной. Попытайтесь попробовать часть DOM через минуту. Благодаря! – Jeff

+0

Как мы это сделаем для XHTML? – Jeff

+0

Я бы подумал, что все, что вам нужно сделать, это изменить DocType на любой xhtml dtd. С удачей. –

2

Хотя я уверен, что вы можете заставить DOM делать то, что вы хотите, я уверен, что вам будет лучше с Tidy.

+0

хотел бы, но не может установить Убирайся на моем сервере. – Jeff

+1

Хотя это не так полно, есть некоторые функции, которые будут проходить и закрывать любые открытые теги, два примера: http://snipplr.com/view/3618/close-tags-in-a-htmlsnippet/ и http: //codesnippets.joyent.com/posts/show/959. – tplaner

+1

Я уверен, что есть некоторые классы на www.phpclasses.org, которые также закрывают открытые теги, вы также можете посмотреть те, которые были построены для XML, поскольку они будут в основном работать одинаково. – tplaner

0

Я думаю, что вы следуете неправильному подходу: вы должны использовать материал DOM для усечения строки, а не после ее усечения.

Это, как я хотел бы сделать это:

  1. Найти место, где вы хотите укоротить Строка
  2. Удалить все дочерние узлы после этой точки
  3. Обрезать строку
Смежные вопросы