Вывод XML в браузер, почему может не работать обработка браузером?

Рубрики: XML  

В моем предпоследнем проекте был пользовательский XML, куда заносились данные о товарах и предоставлялись партнерам в качестве рекламных материалов. XML выводился как обычный текст.

Сам XML был составлен по всем «законам жанра» – определение <?xml?> в начале, указание кодировки, главного тега. Все теги были закрыты, ошибок не было.

Браузеры, как Вы знаете, любят отображать XML по-своему. Оформлять его специальным образом. Этим занимается ФайрФокс и ИЕ (для Оперы нужен плагин). Чтобы было понятно о чем я, вот пример.

Но мой XML почему-то так не отображался. Он отображался просто текстом, причем теги «пропадали» (оно и понятно, браузер не знает таких тегов, но не показывает их). Заказчик же, заметив это, решил, что у меня неправильный XML (понятно, что на сам файл это никак не сказывается).

В чем было дело? Оказалось, что есть две причины на такое «неправильное» отображение.

1) Нужно передать заголовок Content-Type: text/xml; charset=utf-8. Отличается от «обычного» он типом контента (обычно text/html). В PHP заголовок передается так: header («Content-Type: text/xml; charset=utf-8″); (до вывода чего-либо, конечно).

2) По непонятной мне причине XML не может содержать наоборов символов а-ля &nbsp;, но при этом может содержать аналогичные замены для кавычек, например. Также XML не может содержать HTML-теги внутри XML-тегов. То есть может-то может, но тогда браузер будет ругаться на него.

Я написал небольшую функцию, через которую нужно пропустить текст до вывода в XML (скажем, описание товара). Она вырезает теги и некоторые недопустимые комбинации символов.

function xml_check($c){
$c = strip_tags ($c);
$c = str_replace («&ndash;», «», $c);
$c = str_replace («&nbsp;», «», $c);
$c = str_replace («&ldquo;», «», $c);
return $c;
}



Отзывов (6) на «Вывод XML в браузер, почему может не работать обработка браузером?»

    Eugene пишет:

    Если описать enities, то и   содержать может без проблем.
    Ну, а насчет html тегов внутри xml тегов – в xml нет такого понятия как «html теги». Все теги – они «xml»ные. И если ты хочешь в качестве контента в теге отдавать html – надо его энкодить. Еще CDATA помогает.
    Вобщем, работать с xml как с xml, отбросив темное прошлое html :)


    rr пишет:

    Никуда ничего пропускать не надо, надо просто научиться нормально работать с XML, а не страдать херней, которой ты сейчас страдаешь!
    Пропускать XML через функцию, которая удаляет HTML-тэги… ну это вообще трындец.


    DimoninG пишет:

    rr, о мудрый сенсей, покажи, КАК надо! *падает на колени*


    DimoninG пишет:

    Eugene, ты прав. Но вырезать HTML было быстрее, чем дописывать dtd или что там используется :)


    KPC пишет:

    Так можно-же вообще не парится с рисованием XML и делать сиреализацию через какой-нить DOMDocument. Уж он-то точно все нарисует правидно.

    А с DTD уж больно много запары, когда все впрочем и без него работает. Но если разрабатывать определенный «стандарт» для своих целей, то DTD всяко надо писать.

    Хе-хе. XML появился после HTML, но является его мм.. Родителем. При том не разу ещё не встречал HTML, который-бы был валидным XML…


    fess пишет:

    Чтобы внутри xml-ного тега использовать кавычки, скобки и спецсимволы(а соответственно и html-ные теги) нужно использовать CDATA.
    Например: <![CDATA[Бла-бла]]>


Оставьте свой комментарий

Теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не спамер и не робот.
Я спамер и робот!

dimoning.ru
SEO и программирование.
  • Рубрики:



  • Рассылка:

  • Дополнительно:

  • По месяцам:

  • Счетчики:

    Яндекс цитирования

  • dimoning.ru © 2008-2011 г.
    Все материалы авторские, но их можно копировать с указанием прямой ссылки на источник.