php添加动作以形成标记(如果不存在)

时间:2015-07-23 15:45:26

标签: php regex preg-replace preg-match

我有以下表格标签

$content = '<form action="link.php" method="post" class="form-inputs">';
$content1 = '<form method="post" class="form-inputs">';

所以使用我的正则表达式代码:

preg_replace("~<form\s(.|\n)*?>~i",'<form action="linkafterreplace.php" method="post">', $content);

当我将此代码用于$ content和$ content1时,这就是我得到的:

<form action="linkafterreplace.php" method="post">

问题是我的代码无法获取类属性或id属性。 我想要的是:

<form action="linkafterreplace.php" method="post" class="form-inputs">

ps:我替换了很多网址,所以每个网址都有自己的类属性,因此它可能不是表单输入

1 个答案:

答案 0 :(得分:1)

您的正则表达式目前正在抓取整个表单标记并将其替换为

<form action="linkafterreplace.php" method="post">

解决此问题的最佳方法是检查是否存在

<form

并将其替换为

<form action="linkafterreplace.php" method="post"

你需要的电话是(我没有测试它,因为我在没有PHP的电脑上):

preg_replace("~<form~i",'<form action="linkafterreplace.php" method="post"', $content);

希望有道理......

编辑:

由于评论,我正在稍微修改我的答案。同样,我没有带PHP的计算机,因此语法可能略有偏差。

最简单的方法是检查表单标签是否有一个action元素是否使用preg_match,如下所示:

if (preg_match("~action=~i")) {    // Check to see if you find "action="
    preg_replace("~action=\".*\"~i", "action='linkafterreplace.php'", $content); // IFF so, replace it using regex.
} else {
    preg_replace("~<form~i",'<form action="linkafterreplace.php"', $content); // Otherwise add it it.
}

我只是使用正则表达式来检查表单元素中“action =”的存在。如果是这样,我使用正则表达式替换来放入新文件名。否则,我使用正则表达式添加到我的原始答案的开头。

希望对您有所帮助!