一个wordpress下转义符的怪事及解决方法

前几天,有渔老师去现场为一位朋友解决一个网站注册验证的问题。问题是这样的:在朋友的网站用邮箱注册后,系统会发一封邮件到邮箱,然后点击链接设置账号的初始化密码。如下图所示:

但我点击这个链接后,wordpress一直提示invalid key,也就是说key错误。因为是wordpress框架,从url的路由看,我就打开wp-login.php,然后查看其中的action rp。我直观感觉,应该是get url中的key跟数据库中的key值不相等导致的。所以,想进入系统的mysql一查究竟,但遗憾的是竟然没有mysql权限,我也不知道他的网站是让谁做的,估计是个外包吧。因为朋友是不懂技术的,很多事情问他也是一问三不知。没办法,哪就自己闷头搞吧。

外事不决问google,内事不决问baidu。我习惯性地打开baidu,输入:wordpress新用户注册 key无效。发现碰到类似问题的同行也不少,且看他们是如何解决的?他们的建议是:

编辑wp-includes文件夹中的pluggable.php文件,把变量$message里的>符合去掉。我照做了,发现还是不行的哦。所以,网上的东西,很多都得自己再实践下,否则是要被坑的。但到这一步,我更加确信是key的值出问题了。然后我又仔细看了下邮件发送过来的链接,发现这个链接有个问题。

这个链接里的&是&被转义后的值。那么,我在浏览器里输入时把&替换成&会怎样呢?发现竟然OK了,这时密码重置成功了。这样,问题就好办了,理论上,我只要修改pluggable.php,把&替换成&就可以了。$message的变量赋值如下:

$message .= ‘<‘ . network_site_url(“wp-login.php?action=rp&key=$key&login=” . rawurlencode($user->user_login), ‘login’) . “>\r\n\r\n”;

但问题是,我用htmlspecialchars_decode($message)处理也不行,用str_replace("&amp;","&",$message)处理也不行。也就是说,这个&amp;替换不成&。

我再看这$message变量,rp后面的&怎么没被转义,而$key后面的&却被转义了。所以,到这一步,我就怀疑是不是语句的顺序有问题?然后,我就把&key=$key放到($user->user_login)后面。然后,根据前面baidu的一些意见,顺便把<和>符合也去掉。这样,修改后的message如下:

$message .= network_site_url(“wp-login.php?action=rp&login=” . rawurlencode($user->user_login)."&key=$key", ‘login’) . “\r\n\r\n”;

问题就这样解决了。

总结:1,出现问题,问baidu一般都能找到一些建议。但这些建议不一定完全正确,自己还得根据实际情况修改。2,html的一些特殊符号,在存数据库之前需要被转义,在取出数据库后,需要被转换回来,这也是一个很重要的知识点。

时间: 2024-10-07 06:29:07

一个wordpress下转义符的怪事及解决方法的相关文章

iOS 7.1下itms-services在线安装失败的解决方法

前段时间,接到客户的求助,主要是关于无法通过safari在线安装企业级应用的问题.经过一系列测试都没有发现相同现象,最后发现客户使用了还原的功能,把iPad的iOS升级到了7.1.网上搜索了一下,发现从iOS7.1开始,之前使用itms-services://URL方式在线安装ipa文件的方法都失效了,主要表现为在点击安装的时候,会报错为:"无法安装应用程序,因xxx.com的证书无效". 主要原因是苹果公司在iOS 7.1中修改了manifest.plist文件的访问协议,把原来的h

iOS7下status bar相关问题的解决方法

转载自:http://blog.csdn.net/volcan1987/article/details/14227313 iOS7里status bar的实现跟iOS6下有写不一样,前段时间碰到了这个问题,今天总结下 首先网上有很多解决办法,但是有些我觉得并没有按照苹果的思路来,比如把UIViewControllerBasedStatusBarAppearance在plist里设置为NO的方法,这个方法的确可行,但是并不是一个“正确”的思路,而且会有些问题,比如,当你在某个界面隐藏了status

windows下忘记mysql root密码的解决方法(转)

windows下忘记mysql root密码的解决方法(转) 分类: 数据库 mysql5.5安装目录为 e:\mysql5.5 问题:开发机器上的mysql root 密码忘记鸟! 通过一番搜索,解决问题步骤下: 1.dos命令行窗口 进入e:\mysql5.5\bin ,停止mysql 服务 e:\mysql5.5\bin>net stop mysql 注意:看看那任务管理器中是否有mysqld.exe进程,如有,kill them all. 2. 以不检查权限的方式启动mysql e:\m

(转)LINUX下Live555不能获取ip地址解决方法

linux下运行live55 显 示如图 :没有获取ip:  ip是0.0.0.0 live555在不知道本地IP地址与网络接口的情况下,通过一个在本地某端口建立一个UDP连接,然后把这个UDP连接加入 到一个组播组 ,当然要对这个组播组进行相应的设置,比如TTL,回环等等:然后通过UDP连接发送一个数据:最后通过这个UDP连接接收这个数据,并且解析相应的发送地址:大概流程就是这样了. 具体的代码片段live555:groupsock/GroupsockHelper.cpp里:因此我们设置固定的

js添加的表单在火狐下获取不到数据的解决方法

相信很多朋友在进行网页制作的时候都会遇到过这样的问题:就是用js在表单内添加数据控件之后:在火狐下获取不到数据的问题. 前几天,我在开发一个使用js添加数据填写项的时候,也出现了这样的问题:一开始我还以为是火狐下ajax加载数据出了问题(因为在ie下可以正常的获取到数据):经过测试原来并是这样的问题,而是form放得位置不同, 在form和table结合使用的时候,很多朋友都喜欢这样放: <table>                <form>                  

windows xp系统下提示Nsis Error错误的解决方法

通常我们在使用windows xp系统的过程中,经常会遇到一些故障问题,这不,使用windows xp系统的用户表示在使用系统的过程中出现提示Nsis Error错误的情况,其实这个问题也并不是常见,但是解决起来也非常的麻烦,那么,针对这样的问题,我们应该怎么来处理呢?以下是具体的操作步骤. 解决方法介绍: 1.英文意思:运行一个用Nullsoft Scriptable Install System (NSIS)建立的程序常会发生这种错误,起因可能是下载来的文件不完整,或存放该程序的磁盘区坏了,

Linux下检测IP地址冲突及解决方法

Linux下检测IP地址冲突及解决方法 问题说明: 在公司办公网内的一台物理机A上安装了linux系统(ip:192.168.9.120),在上面部署了jenkins,redmine,svn程序.由于是在办公网内,这台机器和同事电脑都是在同一网段的. 突然某天问题出来了:有部分同事远程ssh登陆不上这台linux系统的机器,jenkins/redmine/svn也登陆不上,其他部分同事可以正常使用. 后来发现,是因为这台linux机器的ip被人占用了,ip地址冲突引起的!! 下面介绍下检查ip地

SQL去除数据库表中tab、空格、回车符等特殊字符的解决方法

原文:SQL去除数据库表中tab.空格.回车符等特殊字符的解决方法 按照ASCII码, SELECT char(64) 例如64 对应 @,则 SELECT REPLACE('[email protected]', CHAR(64), 'kk'); 则结果为 abckkqq.com 依此类推, 去掉其他特殊符号,参考ASCII码对照表, 去掉tab符号为 select REPLACE('要替换的字符或列名',char(9),'替换的目标字符') 去掉空格符号为 select REPLACE('要

关于myeclipse10.6安装路径下没有common这个目录的解决方法

大家都知道myeclipse10.6破解就是找Myeclipse下的Common\plugins目录进行替换文件,从而破解! 一般情况下,common这个目录就在安装myeclipse的安装目录下,但特殊情况喜爱不在安装目录下: 原因可能如下: 安装时文件夹没有访问权限,导致在安装目录下写不进Common\plugins目录 myeclipse官方故意进行影藏,以防用户进行对此文件的修改: 解决方法如下: 对第一种情况,安装是右击安装包,点"以管理员身份运行". 安装后找安装目录看是否