搜索引擎URI编码的处理

怎么样同时兼容utf-8和gb2312两种编码

做一个站内搜索遇到一个问题:

网站全站使用的是UTF-8编码,所以get请求的URL也用UTF-8编码,服务器端用UTF-8解码。这种情况下,用户直接在表单里输入提交过 来搜索,是没有问题的。但如果用户直接在浏览器地址栏里把关键词给改了,提交过来,或者从浏览器地址栏的下拉提示列表里点击过来,URL编码就不确定了。 这个和操作系统语言以及浏览器相关。

本文研究了一下google.cn是如何做到同时兼容gb2312和utf-8两种url编码的。虽然解决方法不是很巧妙,但也能完成一般需求。

阅读全文...

分类 : 搜索引擎

linux下文件名特殊符号导致的一个诡异问题

写了个bash脚本递归循环遍历文件夹。本地测试的好好的,结果传到服务器上就不行,一直死循环。以为是linux的版本问题,折腾了半天,才发现只有遍历特定那个文件夹的时候才会出现问题。

最后发现竟然有个文件夹的名字叫 \

当遍历到\文件夹的时候,路径就成为 /home/image/\

而\符号在bash里是转义符号,必须用/home/image/\\才行, /home/image/\表示的还是 /home/image/。所以导致死循环了。

然后又实验了一下,linux下的文件夹没有限制字符,所有的可打印字符都可以作文件夹名。比方 *,\,|,<,>等在windows下是不允许做文件夹名的,但linux下就可以。但这样的文件名确实会给用户造成迷惑。比方一个叫 *的文件夹,用户如果删除的时候忘记转义,输出成  rm -rf *,那就惨了。

 

不知道linux的设计者为什么没考虑到这个问题?或者说考虑到了,但觉得这样的问题应该让用户自己掌控?

标签 :

Related Posts
OpenSuse 11.2 正式发布
Avidemux简易教程
linux下的几款绘图(Flowchart,UML)软件
Linux通过socks连接ssh服务器
mysqldump导出数据到mssql
Shell(Bash)学习笔记(一)


分类 : linux

css强制换行问题

从网上找到的几个css强制换行的解决方案。

阅读全文...

标签 :
分类 : html/css

Javascript对象中使用setTimeout和setInterval的问题

    前两天写一个js时遇到个问题。就是在js对象内部如果用setTimeout或者setInterval调用该对象的一个方法,然后在被调用方法中就无法使用this获取该对象。因为经过setTimeout调用后,this就成了浏览器了,原来那个对象就丢失了。

      如:

 function TestObj(){   
    this.property = "test";   
    this.called = function(){   
       alert(this.property);   
     }   
    this.setTimeCall = function(){   
         setTimeout(this.called,500);   
     }   
 }   

var test = new TestObj();   
test.setTimeCall();  
 

如果直接调用test.called方法是没有问题的。但如果通过setTimeout调用,也就是调用 test.setTimeCall(),this.property就为空了。因为这里的this成浏览器了。同样的问题也发生在监听浏览器的其他事件 上。没办法,于是用了个比较糟糕的办法。

 

function TestObj(){   
   this.property = "test";   
   this.called = function(){   
       alert(this.property);   
}   
   this.setTimeCall = function(){   
    setTimeout("test.called()",500);   
}   
}   
var test = new TestObj();   
test.setTimeCall();  
 

 之所以说这样做糟糕,是因为在定义TestObj时,就必须提前知道TestObj被创建时的变量名。后来在IBM社区看到一篇探讨javascript有限状态机的文章,用了一个很巧妙的办法避免这个问题。

 function TestObj(){   
    this.property = "test";   
    var self = this;   
     this.called = function(){   
         alert(self.property);   
     }   

     this.setTimeCall = function(){   
         setTimeout(self.called,500);   
     }   
 }   

 var test = new TestObj();   
 test.called();   
 test.setTimeCall();  
 

在TestObj中定义一个变量,self,然后指向this。这样用self调用this,就不会发生和浏览器的this对象冲突的问题了。

 虽然是很简单的一个问题,但有时候人脑子转不过弯也没办法。

 

还有一个网友评论提供的办法就是:

 

function TestObj(){  

    this.called = function(){  
        alert("OK");  
    }  
      
    this.setTimeCall = function(){  
        setTimeout(this.called.bind(this),500);  
    }  
}   
 

标签 :

Related Posts
微软对google说:不要把手伸到我媳妇怀里
终于在网上建了个家
javascript库的延迟加载
Javascript(Ajax)开发测试工具
css强制换行问题
javascript获取网页元素的最终样式


分类 : 脚本语言