双休日连续加班,真是好爽……痛苦的不是写不出代码,而是写出代码老板不满意要你重做啊。
最近赶一个网站项目,既然是做网站,那么js和HTML是一定要打交道的,至于服务器脚本语言我们用的是php,这两天加班的时候遇到了几个问题,而且竟然都是特殊字符的问题,好记性不如烂笔头,在这里做个记录免得忘记。
1.js和php
我试图把一个php变量传给js函数,作为url的参数,用js跳转,可没想到,经js这么一转手数据就变了,原来是因为变量的值中带了'+'字符,而js会把'+'字符当成字符串连接符而忽略掉它。而对这种情况一般的处理方法是替换,js对传入的数据进行处理,把加号进行替换,转成url编码的'%2B'即可,可以用replace函数。而这里还有一个问题,php如果在网址中读取GET参数中有加号,会把它当成空格,因为空格的url的一种编码是'+'。
2.mysql和php
我试图向mysql数据库中插入一条数据的时候,mysql却向我返回一个错误,检查后发现原来php的sql语句中的一个字符串变量带了单引号',而单引号在mysql中是特殊字符,导致了sql语句变化,结果出错了。这种情况很简单,只要把那个字符串变量进行转义处理即可,这里可以用php的addslashes()函数,其实,一个网站必须要对这类变量进行处理,不然是非常脆弱的,很容易被攻破。一个例子就是用户登录时可以在密码框输入"'' OR ''=''";这时如果网站没有对数据进行处理的话,任何人都可以轻易登录系统了。
3.html和php
我试图向网页打印一个已经带有数据的表单时,一个input框中数据却总是错误,检查后发现原来是双引号"搞的鬼,我们要使input一开始就带值的话只有设置它的value="某变量a",当a中有双引号时,很明显value=""这句话就被改变了,这种情况下处理的方法是要把变量a进行html的转义,对html有些了解就知道,html使用一些特殊的字符串表示一些特殊字符,而其中一个为大家所熟知的就是' '在html中表示的是一个空格,进行html转义用的php函数是htmlspecialchars()。
魔鬼往往隐藏在细节中,这句话真是足以为一生的警句啊。