Амперсанд отображается как «&» в XML-документе - PullRequest
0 голосов
/ 04 июня 2019

У меня проблемы с отображением символа амперсанда внутри документа XML с использованием PHP 5.6 (сейчас я не могу использовать PHP 7.x)

Я пытался использовать str_replace (), preg_replace и некоторые другие функции, найденные здесь: Невозможно проанализировать амперсанд в строке PHP

и здесь: PHP не имеет функции для XML-безопасного декодирования объектов? У вас нет xml_entity_decode?

Я также заметил, что символ амперсанда был проблемой в PHP 5.2.x (https://bugs.php.net/bug.php?id=39521), хотя я думаю, что это было исправлено.

Вот несколько примеров того, что я пытался сделать:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement', $string);
$rootElement->appendChild($element);

Когда я узнал об ошибке, я попытался:

$string = "SOMETHING & OTHER THINGS";
$string = str_replace('&', '&' $string);
$element = $domDocument->createElement('myElement');
$element->appendChild( $domDocument->createTextNode($string) );
$rootElement->appendChild($element);

То, что я ожидал, было:

<myElement>SOMETHING & OTHER THINGS</myElement>

Что я получил:

<myElement>SOMETHING &amp; OTHER THINGS</myElement>

Или иногда:

<myElement/>

РЕДАКТИРОВАТЬ: Может быть, я должен добавить, что мое программное обеспечение должно загрузить файл. Поэтому, когда я открываю XML-файл с помощью Notepad ++, я получаю результат, который я показал выше.

Не могу разобраться, любая помощь приветствуется. Спасибо.

Ответы [ 2 ]

2 голосов
/ 04 июня 2019

Хорошо, проблема в том, что я открыл XML-файл с помощью Notepad ++, в котором вместо символа амперсанда отображалась сущность «&»;Открытие файла в XML-парсере «решило» мою проблему в определенном смысле.

Спасибо Бармару (https://stackoverflow.com/users/1491895/barmar) за то, что он меня заметил, и всем, кто прокомментировал.

0 голосов
/ 04 июня 2019
  1. & должен быть закодирован как &amp;, чтобы XML был действительным.
  2. XML-парсеры будут декодировать &amp; в &

& имеет особое значение в строке XML, как и <. Он используется для ссылок на сущности. Это могут быть кодовые точки Unicode или именованные объекты в зависимости от фактического формата XML. Примером может быть &nbsp; в (X) HTML. Вот почему & должен быть закодирован в большинстве частей XML-документа. Сериализатор XML расширения DOM сделает это за вас, и XML-парсер будет декодировать.

...