Замена специальных символов при создании XML на PHP
Задача такая, при создании XML, в DOMDocument на php нужно заменить &, ', ", >, < Эти символы на &, &apos, ", > , <
Я из заменяю например
str_replace(['&', '\'', '"', '>', '<'], ['&', '&apos', '"', '>' , '<'], $text);
Но есть и стандартная функция htmlspecialchars ни суть.
Дело в том что createElement вызывает ошибку
PHP Warning: DOMDocument::createElement(): unterminated entity reference quotБанные штучки" in E:\DEV\fixcom\test\class\XMLManager.php on line 104
Но этот XML для API одного приложения, и там сказанно заменять эти символы! Как сделать так что бы DOMDocument их принял?
Приведу пример кода
$dom = new DOMDocument( "1.0", "utf-8" );
$dom->formatOutput = true;
$root = $dom->createElement('start');
$root->setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
$company = $dom->createElement('company','company');
$model = $dom->createElement('model', htmlspecialchars('"TEST" & <AAA> \'BBB\'' ));
$root->appendChild($model);
$dom->appendChild( $root );
print_r($dom->saveXML());
На выходе:
<?xml version="1.0" encoding="utf-8"?>
<start xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<model>"TEST" & <AAA> 'BBB'</model>
</start>
Ковычки не заменились. Ни двойные ни одинарные.
Ответы (1 шт):
HTML сущности должны заканчиваться на ;, поэтому createElement() не видит их.
Лучше использовать htmlspecialchars().
UPD:
createElement() не позволяет экранировать кавычки. Об этом сказано в документации.
Устанавливайте значение через textContent:
$model = $dom->createElement('model');
$model->textContent = $text;