代码改变世界

php单引号和双引号的区别与用法

2012-02-13 00:09  youxin  阅读(18664)  评论(1编辑  收藏  举报

  php里的单引号把内容当成纯文本,不会经过服务器翻译。而双引号则与此相反。里面的内容会经过服务器处理(process). 举个简单的例子:

 
$foo="data";
echo '$foo';                        //单引号输出$foo
echo "$foo";                        //双引号输出data
 
 单引号不能处理变量和转义字符(除了\\和\'这两个),要输出下面的字符串
 
     what's my name?
 
可以这么来写:
   
      echo "what's my name?";  //最简单的写法,单引号和双引号不产生冲突(conflict)
      echo 'what\' my name?';  用斜杠转义
   正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\\和插入单引号\')。所以,当你想在字串中进行变量代换和包 含\n(换行符)等转义序列时,你应该使用双引号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对单引号串 的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速度略慢
写一个windows无效文件名替换函数。(windows文件名无效字符有9个:
/ 去掉文件名中的无效字符,如 \ / : * ? " < > | 
function replaceBadChar($fileName)
{
    // 去掉文件名中的无效字符,如 \ / : * ? " < > | 
    $fileName=str_replace('\\','_',$fileName);
    $fileName=str_replace('/','_',$fileName);
    $fileName=str_replace(':','_',$fileName);
    $fileName=str_replace('*','_',$fileName);
    $fileName=str_replace('?','_',$fileName);
    $fileName=str_replace('"','_',$fileName);
    $fileName=str_replace('<','_',$fileName);
    $fileName=str_replace('>','_',$fileName);
    $fileName=str_replace('|','_',$fileName);
    return $fileName;
}
$str='\/:*?"<>|';
echo replaceBadChar($str);

最开始我把他们都用反斜杠转义了,结果只输出前1个,因为只有反斜杠和单引号需要在单引号中转义,其他都不需要

还有一点的是,str_replace只是简单的字符串替换,与正则无关,所以上面的改成双引号也是ok的

 
如果要输出含有变量的字符串时就必须小心点,否则很可能产生错误。
   
     $email=$_POST['email'];
 
现在要输出this is your  email $email;可以有两个方式
 
  echo "this is your email $email";  //双引号服务器会自动解析
  echo 'this is your email'.$email; //用连字符和纯字符串和变量链接起来
 
  一旦涉及到Mysql中的sql语句,就更得小心了。从简单说起,sql语句,其中的条件是常量
       
       SELECE *  FROM  email_table WHERE username="abc";
 
php中可以写成
       $query="SELECE * FROM  email_table WHERE username='abc'";//query语句一定要用双引号括起来
 
假设查询的条件是变量,如$abc=$_POST['username'];
可以写成
            $query="SELECT * FROM email_table WHERE  username=' ".$abc." ' ";
 
可以分成几步理解:
1."SELECT * FROM email_table WHERE  username=' " 纯字符串
2. .连接符,用来链接后面的字符
3.$abc 显示变量的值
4.." ' "连字符链接后面的单引号(为了与条件中的第一个单引号配对)
其实不必这么复杂,可以这么写
$query="SELECT * FROM email_table WHERE username='$abc' ";
可以这么理解,双引号内部的全都要被服务器解析,单引号只是当成普通字符而已.
 
再复杂一点
$user=array (”name”=> $_REQUEST['user_name‘,"age"=>$_REQUEST['age'];//
$abc=array("name"=>$_POST['username'],"age"=>$_POST['age']);
$abc为数组变量,则写成
$query="SELECT * FROM email_table WHERE username=' " .$abc["name"]." ' ";
 
      最后需要说明的是,很多人以为单引号不能包含双引号,这是错误的。就个简单的例子,输出html语句,
 
echo ' <input type="text" name="email" id="email" /> '; 
   
   html包含很多的双引号使用,可以用单引号包含起来,是没有问题的 。双引号虽好,能包含变量和转义字符,但是效率比单引号低,能用单引号的尽量用单引号,不可忽略的是,要注意区分英文和中文引号(dreamweave包含字符串时会高亮显示,中文则不会)。
  单引号里面的双引号中的变量不会解析! 
 
一.首先想想PHP里所有的单词(其实应该叫符号)有几类.

1.PHP,mysql两方的关键词与函数.例如echo,print,mysql_connect等等.这些肯定不加引号的.

2.常量.新手可能用得不多,常量的好处是全局性,穿透函数.速度也快些不过新手可以暂时不管常量这玩意儿.

3.变量.前面带"$"号的就是变量.可以为变量设一个"值",例如一串字符,一个数字,逻辑(真/假)值等.也可以表示一组值(数组,对象等)

4.值.通常要给常量与变量设置值.赋值语句$a=\'abc\'中,右边的\'abc\'即为值.

5.函数的参数(在括号里的).可以是常量,变量,值三种.

变量(常量)与值的关系正如下列各种情况.

"颜色"与"红",

"长度"与100,

"日期"与2007年10月25号"

二.什么情况下用PHP引号

其实只有第4项"值"需要用到引号,函数的里也只有值要用引号.并且只有字符串(日期值可以当成字符串)内容需要用到引号.数字(可用可不用),真假(不能用)例外.

例子

三.单引号与双引号的区别

一般情况下两者是通用的.但双引号内部变量会解析,单引号则不解析.

例子

所以如果内部只有纯字符串的时候,用单引号(速度快),内部有别的东西(如变量)的时候,用双号引更好点.

四.字符串内部如果出现PHP引号怎么办--关于转义.

比如我们想输出: 我"是\'天才

这时候就必须用到转义了.转义即把本来有作用的符号转成无意义的字符.

这样就正常了,因为号把它后面的任何字符都转成无意义的符号.在这里来说,PHP解析器根本没把号后面的引号当成引号来看待.

同样的,还可以转义分号,$符号等特殊符号.

五.字符串的连接.

这是个麻烦的问题.一般来说,变量值,直接包含在双引号中就可以了.另外字符串的叠加用"."字符.

在复杂的情况里可以用大括号来包含,PHP便知道这是一个完整的东西,里面的引号不会影响到外面的引号关系.

与html的混合也很简单,最好养成HTML中全部用双引号,PHP中尽量用单引号的习惯.这样方便把大段的HTML代码复制过来,只要头尾加上单引号就是一个正确的字符串了.几百行的HTML代码也不用担心PHP引号错乱.

总结一下PHP引号使用原则

1.字符串的值用引号

2.PHP中尽量用单引号,HTML代码全部用双引号

3.在包含变量的时候,用双引号可以简化操作

4.复杂的情况下用大括号包起来

PHP引号还有一个用处就是,有的时候需要用php生成文本文件,换行符\n需要用双引号才能好使,单引号则会直接把\n当成字符输出。