上周编辑反馈我一个奇怪的Bug:很多文章编辑后,就只有一半的内容了! 我很纳闷,怎么会有这样的Bug呢? 等我去看过了问题所在,终于明白了: 程序运行后页面的源码是: 原来在标题中也有双引号,所以firefox以为这是一个Html属性的结束,所以input中的内容是: 我的朋友(“,后面的内容都没有了。 这不简单我马上改好了: $(document).ready( function(){ $(“input.urlencode”).val(decodeURI($(“input.urlencode”).val())); 这是jquery的语法。我是在输出数据时先urlencode一下,这样在input的value项中就没有引号了。 然后在客户端加载后完以后,把这个值改成decodeURI计算出来的值,也就是相当于php的一个urldecode操作。 这下以为好了,谁想一测,还不对。有%2C和加号在标题里。 再Google一下,说是javascript中解密urlencode用decodeURIComponent函数要好一些。urldecode无法正常求解包含有英文逗号和加号的串urlencode后的结果。urlencodeURI无法解含有加号的串urlencode后的结果。 现在我只好写了一个先把密文中的加号换成secret串用decodeURIComponent操作,然后再把secret串换回加号。服务器端仍是先urlencode再输出来,客户端这样进行urldecode解码: String.prototype.Replace=function(a,b) { var str=new String(this); while(str.indexOf(a)>-1) { str=str.replace(a,b); } return str; } function myURIdecode(str) { var secret=’t834ghdt374hgdu7g2rtehuer’; var tmp=str.Replace(“+”,secret); tmp=decodeURIComponent(tmp); tmp=tmp.Replace(secret,” “); return tmp; } 这样,才是正确的对应于php端的urldecode的javascript版的解码函数。 注意,我的php是utf-8的。如果是gb2312,需要更麻烦一些。因为javascript好像一般是utf-8的内码操作。 现在bug好像越来越多,忙不过来了。得上bug系统了。