奥门新浦京官方网站php单引号和双引号的区别与用法

在PHP中,字符串的定义可以使用英文单引号’ ‘,也可以使用英文双引号” “。

【1】单引号和双引号在处理变量的时候做法:

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

但是必须使用同一种单或双引号来定义字符串,如:’Hello
World”和”Hello
World’为非法的字符串定义。

括在双引号内的变量会解释出值,但是括在单引号内则不做处理,直接输出;

 

单引号和双引号到底有啥区别呢?

<?php
    $var = 'my name is huige';

    echo "$var";    //结果是:my name is huige

    echo '$var';    //结果是:$var
?>

$foo=”data”;

PHP允许我们在双引号串中直接包含字串变量。

 

echo ‘$foo’;                        //单引号输出$foo

而单引号串中的内容总被认为是普通字符,因此单引号中的内容不会被转义效率更高。

【2】如果在语句中要转义操作,那么就一定要用双引号了。

echo “$foo”;                        //双引号输出data

比如:

比如,转定义单引号时,写成这样的话:

 

$str='hello';
echo "str is $str"; //运行结果: str is hello
echo 'str is $str'; //运行结果: str is $str
$a = ‘He’s name is Huige.’ ; 

 单引号不能处理变量和转义字符(除了\和’这两个),要输出下面的字符串

php中,双引号中的变量($var)和特殊字符(rn之类)会被转义,单引号中的内容不会被转义(所以效率更高)。

 

 

使用上的话,我以前很喜欢在sql字符串里这样写$sql = “SELECT * FROM table
WHERE id = $id”,这样里面的$id可以被转义,单引号就不行。

程序会把He’s name is Tom.原封不动的显示出来,如果这样写:

     what’s my name?

在JavaScript中单引号和双引号没有区别,只要成对使用就行。

    $a = “He’s name is Huige.”; 

 

我在JavaScript 中使用单引号大多是因为 Javascript 和 HTML
打交道比较多,输出 HTML 片段的时候不需要转义 HTML 中属性的引号。
总之,看实际情况来,怎么方便怎么使用。

 

可以这么来写:

程序就会显示:He’s name is Tom.

   

====================================================

      echo “what’s my name?”;
 //最简单的写法,单引号和双引号不产生冲突(conflict)

下面列举写转义字符的含义(当在双引号内使用这些字符时,它们具有特殊的含义)

      echo ‘what’ my name?’;  用斜杠转义

转义字符的代码 转义字符的含义
" 双引号
单引号
\ 反斜杠
n 换行符
r 回车符
t 制表符
$ 美元符号

   正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\和插入单引号’)。所以,当你想在字串中进行变量代换和包
含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);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>引号</title>
</head>

<body>
<?php

// 设置必要要的变量: 
$quantity = 30; // 出售30件产品.
$price = 119.95; // 单价.
$taxrate = .05; // 5%的发票税.

// 计算总额: 
$total = $quantity * $price;
$total = $total + ($total * $taxrate); // Calculate and add the tax.

// 格式化总额: 
$total = number_format ($total, 2);

// 打印结果使用双引号:
echo "<h3>使用双引号:</h3>";
echo "<p>你所出售的 <b>$quantity</b> 件产品,成本单价为 <b>$$price</b>. 加上发票税,总额为 <b>$$total</b>.</p>n";

// 打印结果使用单引号:
echo '<h3>使用单引号:</h3>';
echo '<p>你所出售的 <b>$quantity</b> 件产品,成本单价为 <b>$$price</b>. 加上发票税,总额为 <b>$$total</b>.</p>n';

?>
</body>
</html>

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

 

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

 最后结果如下图:

 

================================================================

如果要输出含有变量的字符串时就必须小心点,否则很可能产生错误。

奥门新浦京官方网站 1

   

================================================================

     $email=$_POST[’email’];

1、这个例子中用双引号打印结果,是这篇文章(php入门变量之数字)中一个例子的单引号打印结果的另一个解决方法。

 

2、在这个例子中由于双引号是能打印出变量的,所以我们把要打印的东西全部放到双引号中,但是唯一的问题就是打印$符号问题了,要打印出$符号,我们直接进行转义即可。

现在要输出this is your  email $email;可以有两个方式

3、同时在这两种引号内使用换行符(n )会有什么区别呢???

 

答:当把换行符(n )置于双引号内时,它会在HTML
源代码中创建一个新行。当把它置于单引号内时,它会直接打印出和n。

  echo “this is your email $email”;  //双引号服务器会自动解析

================================================================

  echo ‘this is your email’.$email; //用连字符和纯字符串和变量链接起来

FAQ:

 

1、在运行效率上单引号和双引号也是有区别的,一般来说单引号的运行速度会比较快,双引号会比较慢,原因在于双引号要先查找语句中是否有变量,而单引号则不用,因此,如果语句中没有代入变量尽量采用单引号。这是写程序一种习惯,时刻想着提高程序的效率。

 
一旦涉及到Mysql中的sql语句,就更得小心了。从简单说起,sql语句,其中的条件是常量

2、当利用PHP 打印HTML 时,使用单引号最容易。

       

echo '<table width="80% " border="0" cellspacing="2" cellpadding="3" align="center">'; 

       SELECE *  FROM  email_table WHERE username=”abc”;

 

 

如果想使用双引号打印出这段HTML
代码,将不得不对字符串中的所有双引号进行转义。

php中可以写成

echo "<table width="80%" border= "0" cellspacing="2" cellpadding="3" align=" center">"; 

       $query=”SELECE * FROM  email_table WHERE
username=’abc'”;//query语句一定要用双引号括起来

 

 

3、如果你仍然不清楚这两种引号之间的区别,可以使用双引号,这样不太可能出问题。

假设查询的条件是变量,如$abc=$_POST[‘username’];

可以写成

            $query=”SELECT * FROM email_table WHERE  username=’
“.$abc.” ‘ “;

 

可以分成几步理解:

1.”SELECT * FROM email_table WHERE  username=’ ” 纯字符串

  1. .连接符,用来链接后面的字符

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当成字符输出。

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注