Я добавляю содержимое в документ XML с помощью PHP File_Put_Contents
, а затем я использую Microsoft Word для открытия этого документа. Проблема заключается в том, если добавить символ валюты евро (€
), затем прорывается документ, я получаю следующее сообщение об ошибке:Символ евро валюты нарушает XML-документ
ответ
€
не является допустимым XML-объект.
Попытка решить проблемы с кодированием с помощью объектов - это плохая практика. Вместо этого убедитесь, что все ваши строки соответствуют UTF-8.
вы пытались использовали "€? И убедитесь, что вы очистить вашу строку с помощью отрезала ниже:
$currentString = preg_replace("[^!-~ ]", '', $currentString);
@Reagan Gallant, как вы добавляете € ??? В моем ответе он отображает символ евро. – qtran
Сначала убедитесь, что ваши строки имеют UTF-8. Методы и функции в PHP будут ожидать, что UTF-8 будет независим от вывода. Можно работать с другими наборами символов/кодировками, но это действительно сложно.
Если вы создаете XML с использованием XML-API, такого как DOM или XMLWriter, он позаботится о кодировке по мере необходимости. В XML-документе UTF-8 код €
не требуется кодировать.
$document = new DOMDocument('1.0', 'UTF-8');
$document
->appendChild($document->createElement('price'))
->appendChild($document->createTextNode('€ 42.00'));
echo $document->saveXml();
Выход:
<?xml version="1.0" encoding="UTF-8"?>
<price>€ 42.00</price>
Однако в документе ASCII XML должен специальный символ, который будет закодирован в виде числового объекта. Именованные объекты, такие как €
, не будут работать. Они специфичны для (X) HTML, а не для XML.
$document = new DOMDocument('1.0', 'ASCII');
$document
->appendChild($document->createElement('price'))
->appendChild($document->createTextNode('€ 42.00'));
echo $document->saveXml();
Выход:
<?xml version="1.0" encoding="ASCII"?>
<price>€ 42.00</price>
То же самое можно с XMLWriter:
$writer = new XMLWriter();
$writer->openMemory();
$writer->startDocument('1.0', 'ASCII');
$writer->writeElement("price", '€ 42.00');
$writer->endDocument();
echo $writer->outputMemory();
Если вы генерировать XML в виде текста (как правило, не лучший выбор), вам придется принять по уходу за кодированием самостоятельно:
echo '<?xml version="1.0" encoding="UTF-8"?>', "\n";
printf('<price>%s</price>', htmlentities('€ 42.00', ENT_XML1 | ENT_COMPAT, "UTF-8"));
Выход:
<?xml version="1.0" encoding="UTF-8"?>
<price>€ 42.00</price>
Я генерирую XML как текст, я пробовал использовать 'htmlentities', он печатает черное пространство –
Вы уверены, что ваш ввод действительно UTF-8? Если это какая-то другая кодировка/символ, клиент чтения получит несколько разных байтов, которые он не может понять. – ThW
вы имеете в виду это ' Xml version =" 1.0 "encoding =" UTF-8 "?>' ?, yes i do have –
- 1. Символ валюты евро не отображается
- 2. Yii2 - формат валюты евро
- 3. Форвард валюты евро в iOS перемещает символ до/после номера
- 4. Невозможно использовать символ валюты евро (€) в качестве имени метода
- 5. Знак евро/валюты после суммы в SugarCRM
- 6. Не показывать символ евро
- 7. PHP и символ евро
- 8. Шестигранное представление Евро Символ €
- 9. CGContextShowTextAtPoint и символ евро
- 10. символ PHP евро htmlentities
- 11. Евро Символ C++
- 12. Символ евро отображается как «?»
- 13. Эхо-символ ЕВРО
- 14. Curl Символ Евро
- 15. Magento 1.7 - неправильный символ валюты
- 16. Знак валюты евро в текстовом поле
- 17. Сохранение евро стоимости валюты в базе данных
- 18. символ евро в PHP ereg_replace
- 19. Евро Символ в Python pdfkit
- 20. Символ евро не отображается (VBA)
- 21. jQuery не признает символ евро
- 22. HM-10 возвращает символ евро
- 23. Изменение валюты в латексе, что не доллар, фунт или евро
- 24. Символ валюты с другим порядковым номером
- 25. В каком кодировании находится 0xDB символ валюты?
- 26. Как преобразовать символ валюты в код?
- 27. Как хранить символ Евро в базе данных mysql?
- 28. jQuery: Заменить $ (символ валюты) на другой символ валюты
- 29. Как показать символ валюты вместо имени валюты?
- 30. Как получить символ валюты по названию валюты?
так что вы говорите, если пользователь вводит '' € в качестве входных данных, мне нужно заменить его '' €? –
'€' не является допустимым объектом XML, если не определено. Он доступен в (X) HTML, и вы можете определить его для своего XML. По умолчанию он недоступен в XML. – ThW