1

次のようにすべてのxmlを出力するテキストエリアがあります。

<form method="post" action="">
<textarea id="codeTextarea" name="thisxml" cols="100" rows="36">
<?php
$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;
$xml->loadXML('<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
  <game id="103478">
    <opponent>Peter</opponent>
    <oppid>4</oppid>
    <lastdraw>0</lastdraw>
  </game>
  <game id="103479">
    <opponent>Peter</opponent>
    <oppid>4</oppid>
    <lastdraw>2</lastdraw>
  </game>
  <game id="103483">
    <opponent>James</opponent>
    <oppid>47</oppid>
    <lastdraw>2</lastdraw>
  </game>
</data>');

echo htmlspecialchars($xml->saveXML()); 
?>
</textarea>

次に、送信時に新しいxmlでファイルを作成/更新したいのですが、新しいxmlドキュメントで得られるのはこれだけです:

<?xml version="1.0"?>

PHPで次のようにxmlを保存しようとします:

$myFile = 'TEST.xml';
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = htmlspecialchars($_POST['thisxml']);
fwrite($fh, $stringData);
fclose($fh);

誰かが私が間違っていることを教えてもらえますか?

前もって感謝します ;-)

4

3 に答える 3

3

を使用htmlspecialchars($_POST['thisxml'])すると、XML invalid次のような戻り値になります

&lt;?xml version=&quot;1.0&quot; encoding=&quot;ISO-8859-1&quot;?&gt;
&lt;data&gt;
  &lt;game id=&quot;103478&quot;&gt;
    &lt;opponent&gt;Peter&lt;/opponent&gt;
    &lt;oppid&gt;4&lt;/oppid&gt;
    &lt;lastdraw&gt;0&lt;/lastdraw&gt;
  &lt;/game&gt;
  &lt;game id=&quot;103479&quot;&gt;
    &lt;opponent&gt;Peter&lt;/opponent&gt;
    &lt;oppid&gt;4&lt;/oppid&gt;
    &lt;lastdraw&gt;2&lt;/lastdraw&gt;
  &lt;/game&gt;
  &lt;game id=&quot;103483&quot;&gt;
    &lt;opponent&gt;James&lt;/opponent&gt;
    &lt;oppid&gt;47&lt;/oppid&gt;
    &lt;lastdraw&gt;2&lt;/lastdraw&gt;
  &lt;/game&gt;
&lt;/data&gt;

使うだけで使えるfile_put_contents機能を兼ね備えたfopen , fwrite , fclose

file_put_contents('TEST.xml', $_POST['thisxml']);
于 2012-10-01T16:17:33.430 に答える
0

このスクリプトを見つけて、ヘッダーと出来上がりに追加しました:-)

function stripslashes_array(&$array, $iterations=0) {
    if ($iterations < 3) {
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                stripslashes_array($array[$key], $iterations + 1);
            } else {
                $array[$key] = stripslashes($array[$key]);
            }
        }
    }
}

if (get_magic_quotes_gpc()) {
    stripslashes_array($_GET);
    stripslashes_array($_POST);
    stripslashes_array($_COOKIE);
}

ご入力いただきありがとうございます;-)

于 2012-10-01T16:39:37.573 に答える
0

次を使用して、XML ファイルを直接保存できますDOMDocument::save

$xml = new DOMDocument();
$xml->formatOutput = true;
$xml->preserveWhiteSpace = false;

if ($xml->loadXML($_POST['thisxml']) === FALSE)
{
    die("The submitted XML is invalid");
}

if ($xml->save('TEST.xml') === FALSE)
{
    die("Can't save file");
}
于 2012-10-01T16:20:42.443 に答える