3

私はユーザー認証システムに取り組んでいます。できるだけカスタマイズ可能で柔軟にしたいので、PHP と HTML を混在させたくありません。私は問題なく動作するシンプルなテンプレート エンジンを開発しました (レイアウトのみに純粋な HTML ファイルを使用します)。ただし、フォームに問題があります。場合によっては(入力の検証が失敗した場合など)、以前に入力したデータを記憶させたいと思います。出力バッファリングを使用して最後の HTML をユーザーに表示するため、レイアウト全体を文字列に格納しています。この文字列で私がやろうとしているのは、(ID 属性によって) 特定の HTML 要素を見つけ、その後それらの値を変更することです。ケーステキストまたはパスワードフィールドの問題を解決する方法は知っていますが、コンボボックスも使用するため、それらは別の方法で処理する必要があります。DOMを使用してタスクを達成することを考えていましたが、

だからここに私がやりたいことがあります:

  1. DOM を使用して文字列内の ID で要素を検索する 要素を変更する 文字列内の古い要素を新しい要素に適切に置き換えるが、文字列の残りの部分は変更しない

これは単純な (機能しない) スニペットです (問題を説明するには十分なはずです):

<?php
$content = "<input id=\"id\" name=\"name\" type=\"text\" value=\"\" />";
$itemid = "id";
$dom = new DOMDocument();
$dom->loadXML($content);
$item = $dom->getElementById($itemid);
if($item)
{
$value = "New Value";
$newitem = $item;
$newitem->setAttribute('value', $value);
$item = $item->saveXML();
$newitem = $newitem->saveXML();
$content = str_replace($item, $newitem, $content);
}
echo $content;
?>

または、代わりにREGEXを使用する必要がありますか?

どうもありがとう!

4

3 に答える 3

1

いいえ、正規表現に。DOM が適切な選択です。ただし、実装が正しくない可能性があります。IIRC、コードは次のようになります。

    if ($item) {
        $value = "New Value";
        $item->removeAttribute('value');
        $item->setAttribute('value', $value);
        $content = $dom->saveXML();
    }

<textarea>また、やなどの要素については、コードをさらに調整する必要がある場合があります<select>

システムの実装方法によってはうまくいかないかもしれませんが、jQuery を使用することをお勧めします。PHP の を使用するjson_encode()と、PHP 変数をクライアント側コードに「インポート」できます。次に、値をインポートすると、jQuery の DOM を使用できます。特に、val()フォーム要素に人間の「値」の概念をインテリジェントに設定するため、ロジックを自分で調整する必要はありません。このオプションについてさらに説明が必要な場合は、コメントしてください。私または他の誰かが喜んでこの方向に案内してくれると確信しています。

于 2012-06-11T15:37:26.760 に答える
1

これは、Simple dom html parserを使用して簡単に実行できます。

$data = $content = "<input id=\"id\" name=\"name\" type=\"text\" value=\"\" />";
$html = str_get_html($data);
$html->find("input[id='id']",0)->value = "New Value";
echo $html->save();

簡単にできません。

于 2012-06-11T17:17:21.300 に答える
1

コードのより単純なバージョン:

<?php
$content = <<<HTML
<input id="id" name="name" type="text" value="" />
HTML;

$item_ID = "id";
$dom     = new DOMDocument();
$dom->loadHTML($content);
$item = $dom->getElementById($item_ID);
$item->setAttribute("value", "New Value");
$content = $dom->saveHTML();
echo $content;

ポイント

  • HTML の入力と出力を行う場合は、XML ではなくメソッドsaveHTMLと メソッドを使用してください。loadHTML
  • DOMDocumentはすでに置き換え作業を行っているため、その必要はありません。
  • HTML 文字列の場合、ヒアドキュメント構文を使用するのが好きです
于 2012-06-11T15:50:00.073 に答える