質問

どのように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にそれを置く前に、エンティティに任意のユーザー入力をエンコードすることができますように、問題はないはずです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top