前言
刚从PJ转到WordPress,撰写日志不能加表情的问题还没解决(解决Wordpress2.5不能启用可视化编辑器的问题),新的问题又来了,
各种离线发布器都不能注册我的blog,生活总是喜欢这样幽默我。。。。;-)
满世界的四处找文章,结果下午的时候。我这边访问WordPress中文站,又不行。。。
哎~看来不能偷懒了,只有自己分析类,痛苦!解决方法如下:
正文
原因
通过我自己编辑的xmlrpc规范(原谅我不称呼其为协议,NND现在市面上的明明都不规范,还协议个屁)POST工具发现我的接口在Response数据的时候会“吃”掉我两个字符,也直接导致各种离线工具无法解析Response回来的xml数据!
例子
POST的数据(这个是一般的验证规范,详情参照(xmlrpc规范))
<methodCall>
<methodName>blogger.getUsersBlogs</methodName>
<params>
<param>
<value><string></string></value>
</param>
<param>
<value><string>【这个素账号】</string></value>
</param>
<param>
<value><string>【这个素密码】</string></value>
</param>
</params>
</methodCall>
我的wordpressResponse回来的数据(这是我没有修改的时候的)
<?xml version=”1.0″?>
<methodResponse>
<params>
<param>
<value>
<array><data>
<value><struct>
<member><name>isAdmin</name><value><boolean>1</boolean></value></member>
<member><name>url</name><value><string>http://12ice.cn/</string></value></member>
<member><name>blogid</name><value><string>1</string></value></member>
<member><name>blogName</name><value><string>::冰封::</string></value></member>
</struct></value>
</data></array>
</value>
</param>
</params>
</methodRespons
注意到没,我打红字的滴地方。这两标签没匹配上结尾哪里缺了“e>”,就是这里错类先还以为是我自己的眼睛花类,所以导致一直失败的说
解决方法
打开“wp-includes/class-IXR.php”文件,查找“</methodResponse>”,一共有两处
在其后面随便添加两个字符(我加的“bs”:lol: 有点像是在拼字的感觉吧,嘿嘿),OK类
呵呵,其实解决了的忘记更新
win系统有的会这样的问题
BOM编码相应的最后3个字节会被截去,就形成了一个畸形的XML响应
知道了原因就好办了
修改class-IXR.php文件中的函数,新增3个字节到字符串长度用来填充内容长度。
也就是把class-IXR.php中的output改成下面的样式就可以了
function output($xml) {
$xml = ‘< ?xml version=”1.0″?>‘.”\n”.$xml;
$length = strlen($xml)+3;
header(’Connection: close’);
header(’Content-Length: ‘.$length);
header(’Content-Type: text/xml’);
header(’Date: ‘.date(’r’));
echo $xml;
exit;
}
既
$length = strlen($xml);改为$length = strlen($xml)+3;
不用像我一起那样加两个字符。。。。。。
后记
这只是一个暂时滴办法,
没搞懂为什么会“吃”掉我两个字符,素插件?还素我的服务器?。先不管鸟,但是还是希望某位有心人士能帮忙解答一下真正的原因。怕引发其他问题呀:oops: ,可怜类!


我的也不行..我的windows live writer在最开始连接的时候就报错了
呵呵,其实解决了的忘记更新
win系统有的会这样的问题
BOM编码相应的最后3个字节会被截去,就形成了一个畸形的XML响应
知道了原因就好办了
修改class-IXR.php文件中的函数,新增3个字节到字符串长度用来填充内容长度。
也就是把class-IXR.php中的output改成下面的样式就可以了
function output($xml) {
$xml = ‘< ?xml version="1.0"?>‘.”\n”.$xml;
$length = strlen($xml)+3;
header(‘Connection: close’);
header(‘Content-Length: ‘.$length);
header(‘Content-Type: text/xml’);
header(‘Date: ‘.date(‘r’));
echo $xml;
exit;
}
既
$length = strlen($xml);改为$length = strlen($xml)+3;
不用像我一起那样加两个字符。。。。。。
晕了,2.51的时候这个问题已经没有了,升级到2.6之后又出现了
2.6用这个方法不行么?
我还没升2.6.呵呵