web-dev-qa-db-ja.com

PHP生成されたXMLは無効なChar値27メッセージを示します

以下のようにPHPライブラリを使用してXMLを生成しています:

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

上記を実行すると、出力の上にメッセージが表示されるページが表示されます。

このページには次のエラーが含まれています:行274505、行16のエラー:PCDATA無効なChar値27以下は、最初のエラーまでのページのレンダリングです。

Tidyライブラリを使用して修正しようとしました。iconvを使用して、UTF-8の漢字を取得しました。

29
Prashant

このエラーを取り除く便利な機能がこのWebサイトで提案されています。 http://www.phpwact.org/php/i18n/charsets#common_problem_areas_with_utf-8

Utf-8でエンコードされた文字列をXMLドキュメントに配置する場合、utf-8の有効な文字のすべてがXMLドキュメントで受け入れられるわけではないことに注意してください http://www.w3.org/TR/REC-xml/#文字セット

したがって、不要な文字を削除する必要があります。そうしないと、上記のようなXMLの致命的な解析エラーが発生します。

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

誰か他の人の時間を節約できることを願っています。

85
Prashant

Prashantは絶対に正しい。 Javascriptで無効な文字を削除することもできます:

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