壊れたXMLデータをPHPのDOMDocumentのXMLのロード
質問
どのようにXMLファイル内の壊れたデータを扱うのですか?例えば、私が持っていた場合は、
<text>Some &improper; text here.</text>
私がやろうとしている。
$doc = new DOMDocument();
$doc->validateOnParse = false;
$doc->formatOutput = false;
$doc->load(...xml');
と未知のエンティティがありますので、それは、無残に失敗します。私が原因ソフトウェアが書かれている方法にCDATAを使用することはできません、注意してください。私は読み取りとXMLを書き込みモジュールを書いて、時にはユーザーが不適切なテキストを挿入します。
私はDOMDocument-> loadHTML()がうまくすべてをコードしていることに気づいたが、どのように私はそこから続けることができる?
解決
おそらく、あなたはあなたのためのエンティティと重労働を行うためにpreg_replace_callback
を使用することができます:
http://php.net/manual/en/function .preg-置き換える-callback.phpする
function fixEntities($data) {
switch(substr($data, 1, strlen($data) - 2)) {
case 'amp':
case 'lt':
case 'gt':
case 'quot': // etc., etc., etc.
return $data;
}
return '';
}
$xml = preg_replace_callback('/&([a-zA-Z0-9#]*);{1}/', 'fixEntities', $xml);
他のヒント
の入力をプッシュする前に、特殊なXML文字をシリアル化するためにはhtmlspecialchars に使用しますあなたのXML / XHTMLのDOMへ。その名前は、それが置き換え文字のみに基づいて、「HTML」が付いているが、それは、XMLデータのシリアル化のために本当に便利です。
あなたは、XMLを書き込み一つである場合は、XMLにそれを置く前に、エンティティに任意のユーザー入力をエンコードすることができますように、問題はないはずです。
所属していません StackOverflow