我有自定义用户密码重置页面,效果很好,发送带有唯一网址的电子邮件以重置密码,例如:
->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
,则该网址无效,但我无法弄清楚如何防止对这些字符进行双重编码。
答案 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
是%
的实体代码,由于2
和0
不需要编码,因此会产生:%2520
。< / p>