Вывод XML в браузер, почему может не работать обработка браузером? » lamara-nsk.ru


lamara-nsk.ru
Это блог о сео, деньгах, заработке в сети, разработке своих проектов, программировании
и "жизни программиста", бизнесе, блогосфере, фрилансе и многом другом.


Контакты, Реклама в блоге




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

Автор DimoninG, написано 06.05.2009
Рубрика 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 в браузер, почему может не работать обработка браузером?»


ae471697

    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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


    пишет:

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

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

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


    пишет:

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


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

Что здесь почитать?



1.   Разработки.
1.1 Плагин "Я не робот"
1.2 Плагин "Код Adsense прямо в пост"

2.   Заработай.
2.1 Блогун: 20$ в день
2.2 Уходим от налогов в Sape
2.3 Хватит думать, пора зарабатывать

3.   Акции и конкурсы.
3.1 Ссылка за "Рабочий стол"

Показать весь список.

-->








Блог на движке WordPress и тема для него создана DimoninG'ом в 2007 году.
Все материалы авторские, их копирование запрещено законом об авторском праве.