URL正在WordPress中进行双重编码

时间:2015-09-07 15:22:28

标签: php wordpress encoding character-encoding urlencode

我有自定义用户密码重置页面,效果很好,发送带有唯一网址的电子邮件以重置密码,例如:

->add('receiver',
      'text',
       array('invalid_message' => 'user.invalid')

当我将URL放入浏览器时,我被引导到:

https://website.org/reset-password?action=rp&key=chMOWDgCb8h7eFZZby1w&login=Test%20User

如果我从https://website.org/reset-password?action=rp&key=chMOWDgCb8h7eFZZby1w&login=Test%2520User 手动删除了25,则该网址无效,但我无法弄清楚如何防止对这些字符进行双重编码。

1 个答案:

答案 0 :(得分:4)

这是因为%20被编码为文字%20而不是空格。

因此,当您生成链接时,它应该是:

your_function_to_generate_password_link('https://website.org/reset-your-password?action=rp&key=chMOWDgCb8h7eFZZby1w&login=Test User');

而不是:

your_function_to_generate_password_link('https://website.org/reset-your-password?action=rp&key=chMOWDgCb8h7eFZZby1w&login=Test%20User');

我怀疑你现在正在做这样的事情(或者wordpress正在编码):

htmlentities($yourpasslink);

链接本身包含%20而不是文字空间:

如果你要两次运行htmlentities,那就会发生这种情况:

$test = " ";
$first_try = htmlentities($test); // outputs %20
echo $first_try; // outputs %20
echo htmlentities($first_try); // outputs %2520

%25%的实体代码,由于20不需要编码,因此会产生:%2520。< / p>