设为首页 收藏本站
查看: 818|回复: 0

[经验分享] php单引号和双引号的区别与用法

[复制链接]

尚未签到

发表于 2015-8-23 13:28:06 | 显示全部楼层 |阅读模式
    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当成字符输出。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-102998-1-1.html 上篇帖子: 成为一个PHP专家:缺失的环节 下篇帖子: CI框架源码阅读笔记2 一切的入口 index.php
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表