Проблема с акцентом в DOMDocument между разными версиями php
У меня есть старое большое приложение на php, которое использует XML (DOMDocument).
Приложение работает на PHP 5.2.5
$dom = new DOMDocument("1.0", "iso-8859-15");
$dom->formatOutput = true;
...
$node->setAttribute('attr', 'value_with_éàè');
$str = $dom->saveXML();
$str отправляется в Flex, и все работает нормально.
Теперь нам нужно сменить наш сервер. Новая версия PHP - 5.2.13.
В этой версии происходит сбой функции setAttribute. (Строка не является utf-8.....)
И если я посмотрю $str, строка обрезается при первом акценте.
Код работает, если я использую utf8_encode для атрибутов. Проблема в том, что потребуется много времени, чтобы разобрать код и добавить utf8_encode.....
Я ищу переменную, флаг или что-то еще, чтобы приложение работало как старая версия php.
Есть ли какой-то трюк?
1 answers
Был там. Я чувствую твою боль. Проблемы с кодировкой символов сами по себе являются проблемой. Добавьте в этот набор MySQL, php и веб-сервер, и у вас возникнут некоторые серьезные проблемы.
Во-первых, можно настроить набор инструментов для использования IS0-8859-15.
Вы должны убедиться, что ВСЕ используемые вами инструменты, php, сервер mysql, mysql-клиент (настраивается через my.conf или на php) и веб-сервер настроены для этого набора символов. Вы также должны убедиться, что таблицы БД ISO-8859-15, не передавайте и не открывайте данные ни в чем, не настроенном для ISO-8859-15, например...( кашель кашель phpMyAdmin.)
Однажды у меня были проблемы, потому что я открыл дамп бд в своем редакторе UTF8 перед загрузкой в ISO-8859-1 БД, и просто открыв в редакторе и сохранив его повторно, повредил файл с преобразованием UTF8. Конечно, из-за этих проблем вам хочется биться головой о стену, но поверьте мне, выполните описанные выше действия, найдите инструмент, который использует UTF-8, начните с DB и идите оттуда вы сможете обслуживать эти специальные символы, не меняя свой код.
Удачи, друг.