2011-01-05 1 views
3

Я хочу манипулировать документами HTML и XHTML с реализацией PHP DOM. Я использую метод DOMDocument-> loadHTML() для загрузки содержимого.Дифференциация между XHTML и HTML с PHP DOMDocument

Чтобы узнать, является ли загруженный контент XHTML или HTML. DOMDocument имеет объект doctype, который содержит декларацию DOCTYPE из самого документа. До сих пор я думал о сравнении $ dom-> doctype-> publicId, который содержит строки типа «- // W3C // DTD HTML 4.01 // ENtext/html»

Есть ли лучший способ, о котором каждый может думать?

Edit:

Извините, если мой вопрос был немного неясно. Я обновил этот вопрос, поскольку он, возможно, был запутан. Но для того, чтобы это было ясно сейчас: этот вопрос касается не обработки HTML с PHP DOM вообще или XHTML не является хорошим или плохим.

+0

Почему бы просто не исправить исходные документы, а не навлечь дополнительные накладные расходы сервера? –

+0

Что вы имеете в виду, исправив? Я никогда не говорил, что они сломаны. Исходными документами являются все, предоставленные пользователем. Таким образом, может существовать допустимая декларация DOCTYPE. Он также может отсутствовать. Мне просто интересно, если кто-то знает другой или лучший способ сказать, является ли это XHTML или HTML, чем использовать DOMDocument-> doctype. –

+0

уверен, что он загружается как html, вы должны сохранить его как html. он должен поддерживать декларацию типа оригинала. вы можете использовать метод проверки DOM, чтобы определить, действительно ли документ действителен в соответствии с его объявлением типа документа. вы должны исправить код, если он недействителен. – dqhendricks

ответ

1

Если вы загружаете данные из внешнего источника, вы можете проверить тип MIME файла и посмотреть, есть ли он application/xhtml+xml; если это так, это определенно XHTML (конечно, он может лежать и обслуживать с этим типом, но с ужасно искаженной разметкой). В противном случае, если это text/html, тогда он будет проанализирован как суп-тэг HTML. Действительность фактической разметки в сторону, объявление doctype - это ваш лучший лучший способ узнать, является ли контент (или утверждает, что он является) HTML или XHTML.

Как вы говорите, вы можете проверить общедоступный идентификатор и/или URI и определить тип оттуда.

+0

Хорошо. Итак, мой тест для XHTML теперь: «strpos (strtolower ($ dom-> doctype-> publicId), 'xhtml')! == false". Если это не так, я предполагаю, что это HTML. Как вы думаете? –

+0

@Alex: Это звучит хорошо, поскольку браузеры чаще всего получают страницы как текст/html, так что это разумное предположение. Вы можете использовать 'stripos()' вместо 'strpos (strtolower())'. – BoltClock

+0

Прохладный. Благодаря :) –