Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP и XML | Обработка неалфавитных символов

Ответить
Настройки темы
PHP и XML | Обработка неалфавитных символов

Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1203


Конфигурация

Профиль | Отправить PM | Цитировать


Скрипт генерирует XML-документ, после чего тот скармливается XSLT-процессору.

Скрипт:
PHP код: Выделить весь код

<?php

// содержимое
$title "& # 1 7 1 ; Супер заголовок & # 1 8 7 ; ";
$content "<h2>Доставка</h2>";

// создаём XML
$xml = new DOMDocument('1.0','UTF-8');
$xml->formatOutput 1;

// корневой элемент
$nodeRoot $xml->createElement("content");
$xml->appendChild($nodeRoot);

// тэг title
$nodeTitle $xml->createElement("title"$title);
$nodeRoot->appendChild($nodeTitle);

// тэг page
$nodePage $xml->createElement("page"$content);
$nodeRoot->appendChild($nodePage);
...
?>

В общем, получается такой XML:
Код: Выделить весь код
<?xml version="1.0" encoding="UTF-8"?>
<content page="delivery">
  <title>«Супер заголовок»</title>
  <page>& l t ; h2 & g t ; Доставка & l t ; /h2 & g t ; </page>
</content>
Пробелов это я понаставил.

И после обработки XSLT-процессором, разумеется, ни одного тэга из page на странице не получается. Все вот так с амперсандами на странице и выводятся.
Если в CDATA вставлять данные, то всё равно с амперсандами выходит, но уже после XSL-обработки (XML нормальный получается)

Вот такой вот XSL: (см. далее)

Код: Выделить весь код
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output 
method="xml" 
encoding="UTF-8"
indent="yes"
doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"  
doctype-public="-//W3C//DTD XHTML 1.0 Strict//EN" />
<xsl:template match="content">
<html>
<head>
	<title><xsl:value-of select="title"/></title>
</head>

<body>
	<xsl:value-of select="page" />
</body>
</html>
</xsl:template>
</xsl:stylesheet>


Непонятно... Что с ним делать?

Отправлено: 17:23, 16-12-2008

 

Deadooshka


Сообщения: 2257
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Coutty:
Код: Выделить весь код
<xsl:output 
method="xml" 
encoding="UTF-8"
indent="yes"...
»
так аутпут метод то xml или html? имхо
Код: Выделить весь код
<xsl:output method="html"... />

Отправлено: 01:38, 17-12-2008 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1203

Профиль | Отправить PM | Цитировать


Пробовал и xml, и html - результат один и тот же.

Отправлено: 08:13, 17-12-2008 | #3


Deadooshka


Сообщения: 2257
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Coutty:
Код: Выделить весь код
<xsl:value-of select="page" />
предлагаю
Код: Выделить весь код
<xsl:value-of select="page" disable-output-escaping="yes" />
Это сообщение посчитали полезным следующие участники:

Отправлено: 08:28, 17-12-2008 | #4


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1203

Профиль | Отправить PM | Цитировать


Да, это помогло. Спасибо)
Но почему-то на некоторых форумах, найденных гуглом, пишут, что disable-output-escaping="yes" не рекомендуется к употреблению. Что в нём не так?

А как обрабатывать символы типа & n b s p ; в XML-документе? XSL выдаёт на них ошибку Entity 'nbsp' not defined in Entity. Неужели только юникод-последовательностями & # 1 6 0 ; и подобными? Это ж сильно непривычно...

Отправлено: 08:35, 17-12-2008 | #5


Deadooshka


Сообщения: 2257
Благодарности: 581

Профиль | Отправить PM | Цитировать


Цитата Coutty:
disable-output-escaping="yes" не рекомендуется к употреблению »
Цитата http://www.rol.ru/news/it/helpdesk/xslt01.htm#disable-output-escaping:
Поскольку запрет на маскирование при выводе может работать не на всех XSLT процессорах и может создавать XML документы, которые будут некорректны, то этот режим должен использоваться только тогда, когда нет других альтернатив.
тут мне кажется будет понятно (спецификация)...
Это сообщение посчитали полезным следующие участники:

Отправлено: 09:26, 17-12-2008 | #6


Аватара для Coutty

Кот Ти


Сообщения: 7318
Благодарности: 1203

Профиль | Отправить PM | Цитировать


Да, такой документ у меня есть. Я только не дочитал его
Ну, если проблема только в возможности создания некорректного XML, то вполне можно пользоваться для своих целей.

Хотя про ENTITY я немного не понял. Значит, их надо описать в DTD примерно так:
Код: Выделить весь код
<!DOCTYPE content[
  <!ENTITY nbsp " ">
  <!ENTITY laquo "«">
  <!ENTITY raquo "»">
]>
Но как в PHP прикрепить DTD к XML - не знаю... Пробовал через DOMDocument::createEntityReference, но оно при использовании "в лоб" просто добавляет строку & n b s p ; (или другую сущность) в конец XML, разрушая структуру.

PHP код: Выделить весь код

$en1 $xml->createEntityReference('laquo');

$xml->appendChild($en1);
$en1T $xml->createTextNode("«");
$en1->appendChild($en1T); 


Отправлено: 10:42, 17-12-2008 | #7



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » PHP и XML | Обработка неалфавитных символов

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Функция PHP для удаления не нужных символов darksmoke Вебмастеру 3 01-04-2008 01:18
XML + XSL + PHP => HTML, Как передать бинарный код рисунка ? Lexxx_HU Вебмастеру 5 02-03-2007 17:55
как на php конвертировать XML в PDF, RTF Vlad Drakula Вебмастеру 5 07-12-2006 17:21
Парсет XML для PHP Irlon Вебмастеру 21 22-06-2006 15:08
обработка форм текста на PHP MXM Вебмастеру 3 11-09-2004 04:27




 
Переход