Декодирование XML из UTF-8 в ISO-8859-1 в переполнении стека

Я пытаюсь «декодировать» файл XML (и преобразовать его с помощью XSLT), но у меня возникают проблемы с декодированием обоих файлов. Сценарий таков:

У меня есть сайт для ввода данных, который все закодирован в ISO-8859-1 (наша база данных Oracle находится в этом формате, поэтому я не могу его изменить). Проблема в том, что у меня есть эти 2 файла (XML для отображения формы ввода данных и XSLT для преобразования в HTML). Оба файла сохраняются в кодировке ISO-8859-1, и оба имеют соответствующий заголовок, т.е. и всякий раз, когда я читаю файлы и показываю их в браузере, специальные символы (ñ, á, ¿) отображаются либо в виде UTF-8, либо в виде знака вопроса (в зависимости от метода, который я использую для отображения), но никогда как «нормальное» представление.

Мой код для отображения файла XML:

<?php
$xslString = file_get_contents("catalog.xsl");
$xslString = utf8_decode($xslString);
$xslDoc = simplexml_load_string($xslString);

$xmlString = file_get_contents("questionnaire.xml");
$xmlString = utf8_decode($xmlString);
$xmlDoc = simplexml_load_string($xmlString);

$proc = new XSLTProcessor();
$proc->importStylesheet($xslDoc);
?>

Я уже пробовал несколько комбинаций DOMDocument, iconv, mb_convert_encoding, но они показывают XML-файл в виде не кодированного UTF, знака вопроса или двойного знака вопроса.

С другой стороны, это также портит мой ввод данных, так как, если я хочу ввести один из этих символов, они либо отображаются как? или же ?? в соответствующем поле данных в БД, или они усекаются при первом специальном символе (если я использую iconv).

Что мне не хватает? Есть ли обходной путь? Я не могу ничего конвертировать в UTF-8 из-за базы данных.

Я надеюсь, что я достаточно ясно, извините за мой английский.

Заранее спасибо!

0

Решение

Надеюсь, что это помогает другим. В итоге было две вещи:

1) Я читал файлы XML / XSL примерно так (в моем оригинальном скрипте):

<?php
$xmlDoc = new DOMDocument();
$xmlDoc->loadXML($xmlFile);
$xmlDoc->load("xmlfile.xml");
?>

который фактически изменил кодировку на UTF-8. Я изменил строки на:

<?php
$xmlString = file_get_contents("xmlfile.xml");
$xmlDoc = simplexml_load_string($xmlString);
?>

удалив оператор utf_decode, и это сработало как шарм. Теперь я вижу свои специальные символы на экране так, как они предназначены. Как побочный эффект, данные, введенные в форму, теперь правильно сохраняются в моей базе данных, поэтому я получил две птицы за один снимок.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]