|
В моем предпоследнем проекте был пользовательский 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 не может содержать наоборов символов а-ля , но при этом может содержать аналогичные замены для кавычек, например. Также XML не может содержать HTML-теги внутри XML-тегов. То есть может-то может, но тогда браузер будет ругаться на него.
Я написал небольшую функцию, через которую нужно пропустить текст до вывода в XML (скажем, описание товара). Она вырезает теги и некоторые недопустимые комбинации символов.
function xml_check($c){
$c = strip_tags ($c);
$c = str_replace («–», «», $c);
$c = str_replace (« », «», $c);
$c = str_replace («“», «», $c);
return $c;
}
Оставьте свой комментарий
|
06.05.2009 в 5:28 пп
Если описать enities, то и содержать может без проблем.
Ну, а насчет html тегов внутри xml тегов – в xml нет такого понятия как «html теги». Все теги – они «xml»ные. И если ты хочешь в качестве контента в теге отдавать html – надо его энкодить. Еще CDATA помогает.
Вобщем, работать с xml как с xml, отбросив темное прошлое html :)
07.05.2009 в 7:01 дп
Никуда ничего пропускать не надо, надо просто научиться нормально работать с XML, а не страдать херней, которой ты сейчас страдаешь!
Пропускать XML через функцию, которая удаляет HTML-тэги… ну это вообще трындец.
07.05.2009 в 12:26 пп
rr, о мудрый сенсей, покажи, КАК надо! *падает на колени*
07.05.2009 в 12:26 пп
Eugene, ты прав. Но вырезать HTML было быстрее, чем дописывать dtd или что там используется :)
29.05.2009 в 12:28 дп
Так можно-же вообще не парится с рисованием XML и делать сиреализацию через какой-нить DOMDocument. Уж он-то точно все нарисует правидно.
А с DTD уж больно много запары, когда все впрочем и без него работает. Но если разрабатывать определенный «стандарт» для своих целей, то DTD всяко надо писать.
Хе-хе. XML появился после HTML, но является его мм.. Родителем. При том не разу ещё не встречал HTML, который-бы был валидным XML…
06.06.2009 в 6:05 пп
Чтобы внутри xml-ного тега использовать кавычки, скобки и спецсимволы(а соответственно и html-ные теги) нужно использовать CDATA.
Например: <![CDATA[Бла-бла]]>