1

我有一些我无法更改的 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属性去哪了?谁能告诉我为什么这消失了?谢谢。

4

1 回答 1

1

我敢肯定,有了这段代码,你所有的梦想都会成真:

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

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

于 2013-11-14T23:04:13.863 回答