1

大文字のフィールド名とスペースを持ついくつかのフォームをやり直そうとしています。数百のフィールドと50以上のフォームがあります...フォームのHTMLを解析するPHPスクリプトを作成することにしました。

これで、htmlを投稿するテキストエリアができました。すべてのフィールド名をから変更したいと思います。

name="Here is a form field name"

name="here_is_a_form_field_name"

1つのコマンドでどのように解析して変更し、名前タグのすべてが小文字になり、スペースがアンダースコアに置き換えられるようにすることができますか?

preg_replaceを式で想定していますか?

ありがとう!

4

3 に答える 3

8

HTMLの操作に正規表現を使用しないことをお勧めします..代わりに、次のようなDOMDocumentを使用します

$dom = new DOMDocument();
$dom->loadHTMLFile('filename.html');

// loop each textarea
foreach ($dom->getElementsByTagName('textarea') as $item) {

    // setup new values ie lowercase and replacing space with underscore
    $newval = $item->getAttribute('name');
    $newval = str_replace(' ','_',$newval);
    $newval = strtolower($newval);
    // change attribute
    $item->setAttribute('name', $newval);
}
// save the document
$dom->saveHTML();

代わりに、 Simple HTML DOM Parserのようなものを使用することもできます- リンクされたサイトにいくつかの良い例があります

于 2013-01-02T16:19:03.287 に答える
1

preg_replace()というか、仕事に適したツールであることに同意しpreg_replace_callback()ます。タスクでの使用方法の例を次に示します。

preg_replace_callback('/ name="[^"]"/', function ($matches) {
  return str_replace(' ', '_', strtolower($matches[0]))
}, $file_contents);

ただし、後で差分ツールを使用して結果を確認し、必要に応じてパターンを微調整する必要があります。

DOM パーサーを使用しないことをお勧めする理由は、通常、DOM パーサーが無効な HTML や、テンプレート エンジンのタグなどを含むファイルを詰まらせるからです。

于 2013-01-02T16:24:39.927 に答える
0

これはあなたの解決策です:

<?php
$nameStr = "Here is a form field name";

while (strpos($nameStr, ' ') !== FALSE) {
    $nameStr = str_replace(' ', '_', $nameStr);
}
echo $nameStr;
?>
于 2013-01-02T17:21:41.873 に答える