1

我正在尝试重做一些具有大写字段名称和空格的表单,有数百个字段和 50 多个表单...我决定尝试编写一个 PHP 脚本来解析表单的 HTML。

所以现在我有一个文本区域,我会将 html 发布到其中,我想更改所有字段名称

name="Here is a form field name"

name="here_is_a_form_field_name"

如何在一个命令中解析并更改它,以便名称标签中的所有内容都为小写,空格替换为下划线

我假设 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 解析器的原因是它们通常会阻塞无效的 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 回答