web-dev-qa-db-fra.com

PHP XML généré affiche un message de valeur Char 27 invalide

Je génère du XML en utilisant la bibliothèque PHP comme ci-dessous:

$dom = new DOMDocument("1.0","utf-8");

Faire ci-dessus se traduit par une page qui affiche un message en haut de la sortie.

Cette page contient les erreurs suivantes: erreur sur la ligne 16 à la colonne 274505: PCDATA valeur Char non valide 27 Ci-dessous est un rendu de la page jusqu'à la première erreur.

J'ai essayé de rectifier en utilisant la bibliothèque Tidy .. utilisé iconv pour obtenir le caractère chinois en UTF-8.

30
Prashant

Une fonction utile pour se débarrasser de cette erreur est suggérée sur ce site. http://www.phpwact.org/php/i18n/charsets#common_problem_areas_with_utf-8

Lorsque vous mettez des chaînes codées utf-8 dans un document XML, vous devez vous rappeler que tous les caractères valides utf-8 ne sont pas acceptés dans un document XML http://www.w3.org/TR/REC-xml/# jeux de caractères

Vous devez donc supprimer les caractères indésirables, sinon vous aurez une erreur d'analyse XML fatale comme ci-dessus

function utf8_for_xml($string)
{
    return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $string);
}

J'espère que cela fait gagner du temps à quelqu'un d'autre ..

85
Prashant

Prashant a absolument raison. Vous pouvez également supprimer les caractères invalides dans Javascript en faisant:

function utf8_for_xml(inputStr) {
  return inputStr.replace(/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm, '');
}
5
Quang Tran