2012-02-14 2 views
0

Проведя несколько часов исследований, я не смог ответить на этот вопрос. Я пытаюсь отправить XML-строку третьим лицам, поэтому мне нужно закодировать некоторые символы, в данном случае одиночные и, возможно, двойные кавычки. Я использую PHP XML Dom для достижения этого, но функция saveXML() всегда кодирует кавычки, которые, как кажется. Очень простой пример ниже, и когда вы просматриваете вывод, & apos; был заменен на «но остальные все еще имеют свои коды. Может кто-нибудь объяснить, почему это так и как я могу обойти это (без str_replace). Благодарю.Проблема кодирования XML-объектов XML

$XMLDoc = new DOMDocument('1.0', 'utf-8'); 
$comments = $XMLDoc->createElement('Comments'); 
    $text = $XMLDoc->createElement('Text', "An apostrophe here < ' > Pound sign: £"); 
$comments->appendChild($text); 
$XMLDoc->appendChild($comments); 
echo $XMLDoc->saveXML(); 
+0

Возможно, связанные с: http://stackoverflow.com/questions/6791298/convert-apos-to-an-apostrophe-in-php –

+0

Просто чтобы прояснить, если заменить ' с &039; он все еще делает то же самое –

+0

I винить тот факт, что он не является частью HTML 4.01, хотя я не могу сказать, почему это могло бы иметь какой-либо эффект в этой ситуации. – cmbuckley

ответ

2

Вам необходимо использовать функцию createEntityReference, чтобы заставить ее пройти через немолотый.

Пример:

$XMLDoc = new DOMDocument('1.0', 'utf-8'); 
$comments = $XMLDoc->createElement('Comments'); 

$text1 = $XMLDoc->createTextNode('An apostrophe here < '); 
$text2 = $XMLDoc->createEntityReference('apos'); 
$text3 = $XMLDoc->createTextNode(' > Pound sign: '); 
$text4 = $XMLDoc->createEntityReference('pound'); 

$comments->appendChild($text1); 
$comments->appendChild($text2); 
$comments->appendChild($text3); 
$comments->appendChild($text4); 
$XMLDoc->appendChild($comments); 
echo $XMLDoc->saveXML(); 

Обратите внимание, что некоторые элементы кодируются по умолчанию, createTextNode. < и> закодированы, знаки фунта - нет. Надеюсь, это поможет!

+0

Спасибо за ответ, но все это кажется очень громоздким только ради кодированного апострофа. Нет ли настроек в php DOM, чтобы предотвратить его от неэквидирующих объектов? Для меня это звучит как ошибка php, поэтому я могу сообщить об этом им –

Смежные вопросы