PHP generated XML shows invalid char value 27 message

Generuję XML za pomocą biblioteki PHP jak poniżej:

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

Powyższe działanie skutkuje wyświetlaniem wiadomości na wyjściu.

Ta strona zawiera następujące błędy: błąd w linii 16 w kolumnie 274505: PCDATA invalid char value 27 Poniżej znajduje się renderowanie strony do pierwszego błędu.

Próbowałem prostować przy użyciu biblioteki Tidy.. użyto iconv, aby uzyskać chiński znak w UTF-8.

Author: j0k, 2012-09-01

2 answers

Przydatna funkcja, aby pozbyć się tego błędu jest sugerowana na tej stronie. http://www.phpwact.org/php/i18n/charsets#common_problem_areas_with_utf-8

Umieszczając w dokumencie XML zakodowane ciągi znaków utf-8 Należy pamiętać, że nie wszystkie ważne znaki utf-8 są akceptowane w dokumencie XML http://www.w3.org/TR/REC-xml/#charsets

Więc powinieneś usunąć niechciane znaki, w przeciwnym razie będziesz miał fatalny błąd parsowania XML, taki jak above

function utf8_for_xml($string)
{
    return preg_replace ('/[^\x{0009}\x{000a}\x{000d}\x{0020}-\x{D7FF}\x{E000}-\x{FFFD}]+/u', ' ', $string);
}
Mam nadzieję, że to oszczędzi komuś czasu..
 81
Author: Prashant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-16 10:17:32

Prashant ma całkowitą rację. Możesz również usunąć nieprawidłowe znaki w Javascript, wykonując:

function utf8_for_xml(inputStr) {
  return inputStr.replace(/[^\x09\x0A\x0D\x20-\xFF\x85\xA0-\uD7FF\uE000-\uFDCF\uFDE0-\uFFFD]/gm, '');
}
 4
Author: Quang Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-16 02:12:28