我正在尝试重做一些具有大写字段名称和空格的表单,有数百个字段和50 +表单...我决定尝试编写一个PHP脚本来解析表单的HTML。
所以现在我有一个textarea,我将发布html,我想更改所有字段名称
name="Here is a form field name"
到
name="here_is_a_form_field_name"
如何在一个命令中解析并更改它,以便名称标签中的所有内容都为小写,空格将替换为下划线
我假设带有表达式的preg_replace?
谢谢!
答案 0 :(得分:8)
我建议使用not using regex for manipulation of 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这样的工作 - 链接网站上有一些很好的例子
答案 1 :(得分:1)
我同意preg_replace()
或更确切preg_replace_callback()
是适合这项工作的工具,以下是如何将其用于您的任务的示例:
preg_replace_callback('/ name="[^"]"/', function ($matches) {
return str_replace(' ', '_', strtolower($matches[0]))
}, $file_contents);
然而,您应该使用diff工具检查结果,并在必要时微调模式。
我建议针对DOM解析器的原因是它们通常会阻塞无效的HTML或包含例如模板引擎标签的文件。
答案 2 :(得分:0)
这是您的解决方案:
<?php
$nameStr = "Here is a form field name";
while (strpos($nameStr, ' ') !== FALSE) {
$nameStr = str_replace(' ', '_', $nameStr);
}
echo $nameStr;
?>