当我使用'preg_replace()'时,'method'属性消失了

时间:2013-11-14 22:32:31

标签: preg-replace

我有一些我无法更改的HTML,因此我需要使用preg_replace()

我得到这样的HTML -

$form = wp_login_form(array('echo' => false));
$form = preg_replace('/action=".{1,1000}["]/', 'action="'.get_admin_url().'admin-post.php"', $form);

echo $form;

如果我注释掉preg_replace()行,我就有了这个 -

<form id="loginform" method="post" action="http://dev.drinkingday.co.uk/wp-login.php" name="loginform">
    {form stuff here}
</form>    

但是,如果我离开那条线,我就离开了这个 -

<form id="loginform" action="http://dev.drinkingday.co.uk/wp-admin/admin-post.php" name="loginform">
    {form stuff here}
</form>

method属性去了哪里?任何人都可以告诉我为什么这已经消失了?感谢。

1 个答案:

答案 0 :(得分:1)

我确信通过这段代码,您的所有梦想都会成真:

$form = preg_replace('~\baction="\K[^"]+"~',
                     get_admin_url() . 'admin-post.php"', $form);

正如你可以在我的评论中看到的那样,我认为如果属性消失,那是因为你使用带有贪婪量词的点(即.{1,1000})来捕获所有可能的字符(直到第一个换行符) )然后回溯找到一个字符后面跟一个双引号。因此,将删除action属性之后的所有属性。