单引号,双引号,转义

一文搞定Shell编程中的单引号双引号、反引号和转义符的区别和使用 linux中常见的单引号双引号等符号的区别和使用 阅读详情
2011-07-07 11:14

单引号,双引号,转义

最近发现一个问题,是有关引号与转义的,于是就整理了一下这方面的知识,以方便以后温故。

 

双引号:

·在字串中使用变量
  这个功能让你无须使用连接符号来粘和大量的简单字符串。PHP允许我们在双引号串中直接包含字
串变量,我们可以发现下面的两个字串的处理结果是相同的。

·斜杠和SQL语句
  生成HTML代码或SQL查询语句是编写PHP程序时经常遇到而且是件有趣的事情。为什么这么说呢,
因为这涉及到生成另外一种类型的代码,你必须仔细地考虑和遵循这种代码所要求的编写语法和规
则。
  我们来看这样一个例子,假如你想查询数据库中名字是“O'Keefe”的用户,通常SQL语句的形式
是这样的:
select * from users where last_name = 'O\'Keefe'
  请注意SQL语句这个英文所有格(撇号)需使用反斜杠转义。PHP专门提供了一些函数来处理这样
的情况,函数AddSlashes($str)的用途就是自动在字串中对引号字符插入反斜杠转义符:
$last_name = "O'Keefe";
$sql = "select * from users where last_name = '" . addslashes($last_name) . "'";
  在这个例子中,你还要在last_name字串外面括上单引号(SQL语法要求),由于这里使用的是双
引号串,所以对这对单引号就无须使用转义了。下面的这个语句是使用单引号串的等价形式:
$sql = 'select * from users where last_name = \'' . addslashes($last_name) . '\'';
  任何时候你要在数据库中写入字串,你都必须确保里面的引号正确使用了转义符号,这是很多PHP
初学者常犯的错误。

·双引号和HTML
  与SQL语句不同,在标准HTML语言中双引号常被用来表示字串(现在很多浏览器具备较强的容错功
能,允许在HTML中用单引号甚至不用引号表示字符串),例如:
$html = '<a href="'.$url.'">'.$link.'</a>';
$html = "<a href=\"$url\">$link</a>";
  HTML语言不支持反斜杠转义,这一点在我们使用表单的hidden inputs来传输数据的时候就会有所
体会了。设置hidden inputs的值的最好办法,是使用htmlspecialchars()函数来编码。下面的语句可
以正常传输一个可能包含双引号的数据:
  <input type=hidden name=var value="<?php echo htmlspecialchars($var) ?>">

 

单引号与双引号的区别:

双引号里面的字段会经过编译器解释,然后再当作HTML代码输出。

单引号里面的不进行解释,直接输出。

例如:

$foo = 2;
echo "foo is $foo"; // 打印结果: foo is 2
echo 'foo is $foo'; // 打印结果: foo is $foo
echo "foo is $foo\n"; // 打印结果: foo is 2 (同时换行)
echo 'foo is $foo\n'; // 打印结果: foo is $foo\n
  正如你所看到的,在单引号串中甚至反斜杠也失去了他的扩展含义(除了插入反斜杠\\和插入单
引号\')。所以,当你想在字串中进行变量代换和包含\n(换行符)等转义序列时,你应该使用双引
号。单引号串可以用在其他任何地方,脚本中使用单引号串处理速度会更快些,因为PHP语法分析器对
单引号串的处理方式比较单纯,而双引号的处理由于串内部也需要解析,因此更复杂些,所以处理速

度略慢。

 

下面列出各种表达方法:
<html>
<body>
<input value="外双引号内双引号-错误" type="button" onclick="alert("OK");" /><br />
<input value="外单引号内单引号-错误" type="button" onclick='alert('OK');' /><br />
<input value="两个双引号-错误" type="button" onclick="alert(""OK"");" /><br />
<input value="两个单引号-错误" type="button" onclick="alert(''OK'');" /><br />
<input value="\+双引号-错误" type="button" onclick="alert(\"OK\");" /><br />
<input value="\+单引号-错误" type="button" onclick="alert(\'OK\');" /><br />
<input value="外双引号内单引号-OK" type="button" onclick="alert('OK');" /><br />
<input value="外单引号内双引号-OK" type="button" onclick='alert("OK");' /><br />
<input value="外部不使用引号-OK" type="button" onclick=alert('OK');alert("OK"); /><br />
<input value="HTML转义字符"(& # 3 4 ;)-OK" type="button" onclick="alert("OK");" /><br />
<input value="HTML转义字符'(& # 3 9 ;)-OK" type="button" onclick="alert('OK');" /><br />
<input value="HTML转义字符"(& # x 2 2 ;)-OK" type="button" onclick="alert('OK');" /><br />
<input value="HTML转义字符'(& # x 2 7 ;)-OK" type="button" onclick="alert('OK');" /><br />
<input value="HTML转义字符&quot;(& q u o t ;)-OK" type="button" onclick="alert(&quot;OK&quot;);" /><br />
<input value="HTML转义字符&apos;(& a p o s ;)-IE错误" type="button" onclick="alert(&apos;OK&apos;);" /><br />

<input value="其它\\-错误" type="button" onclick="alert(\\"OK\\");" /><br />
<input value="其它\& # 3 4 ;-错误" type="button" onclick="alert(\"OK\");" /><br />
</body>
</html>

 

转义:

单引号中的字符串中需要转义的字符只有反斜杠和单引号本身。PHP不会检查单引号字符串中的插入变量及任何转义的序列。所以用这种方式定义字符串不仅直观而且速度快

双引号
不能识别转义的单引号,但是能够识别插入的变量和表1-1中的转义序列。

PHP提供两个方便我们引用数据的魔法引用函数 magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据 碰到单引号'和双引号"以及反斜线 \ 是自动加上反斜线,帮我们自动转译符号,确保数据操作的正确运行,可是我们在php不同的版本或者不同的服务器配置下,有的 magic_quotes_gpc和magic_quotes_runtime设置为on,有的又是off,所以我们写的程序必须符合on和off两种情 况。那么magic_quotes_gpc和magic_quotes_runtime两个函数有什么区别呢?看下面的说明: 
magic_quotes_gpc 
作用范围是:WEB客户服务端; 
作用时间:请求开始是,例如当脚本运行时. 
magic_quotes_runtime 
作用范围:从文件中读取的数据或执行exec()的结果或是从SQL查询中得到的; 
作用时间:每次当脚本访问运行状态中产生的数据. 
所以 
magic_quotes_gpc的设定值将会影响通过Get/Post/Cookies获得的数据 
magic_quotes_runtime的设定值将会影响从文件中读取的数据或从数据库查询得到的数据

// 检查magic_quotes_gpc是否打开,如果没有打开,用addslashes进行转义

if (get_magic_quotes_gpc()) {     
$str = $_POST['str']; 
} else { 
$str =addslashes($_POST['str']); 
}

 

在这里顺便在提几个想关联的函数: 
set_magic_quotes_runtime(): 
设置magic_quotes_runtime值. 0=关闭.1=打开.默认状态是关闭的.可以通过 echo phpinfo(); 查看magic_quotes_runtime 
get_magic_quotes_gpc(): 
查看magic_quotes_gpc值.0=关闭.1=打开. 
get_magic_quotes_runtime(): 
查看magic_quotes_runtime值。0=关闭.1=打开. 
注意的是没有 set_magic_quotes_gpc()这个函数,就是不能在程序里面设置magic_quotes_gpc的值。 

 

使用stripslashes去掉转义,使用addslashes添加转义字符。

 
string addslashes ( string str) 返回字符串:


该字符串为了数据库查询语句等的需要在某些字符前加上了反斜线。这些字符是单引号(\')、双引号(\")、反斜线(\\)与 NUL(NULL 字符) stripslashes作用相反在处理mysql和GET、POST的数据时,常常要对数据的引号进行转义操作。 PHP中有三个设置可以实现自动对'(单引号),"(双引号),\\(反斜线)和 NULL 字符转移。 PHP称之为魔术引号,这三项设置分别是 magic_quotes_gpc 影响到 HTTP 请求数据(GET,POST 和 COOKIE)。 
不能在运行时改变。在 PHP 中默认值为 on。 magic_quotes_runtime 如果打开的话,大部份从外部来源取得数据并返回的函数,包括从数据库和文本文件,所返回的数据都会被反斜线转义。该选项可在运行的时改变,在 PHP 中的默认值为 off。


magic_quotes_sybase:


如果打开的话,将会使用单引号对单引号进行转义而非反斜线。此选项会完全覆盖 magic_quotes_gpc。如果同时打开两个选项的话,单引号将会被转义成 "。而双引号、反斜线和 NULL 字符将不会进行转义。虽然方便的实现了对特殊符号的自动转义,但是这样会使得程序效率降低,并导致程序可移植变得麻烦。在不知道服务器ini设置的情况 下,还需要调用get_magic_quotes_gpc() ,get_magic_quotes_runtime() 或ini_get()来检测状态。

 

if(!get_magic_quotes_gpc()){
 foreach ($_POST as &$items){
  $items = addslashes($items);
 }

}

我们在程序中的写法似乎有点怪异,在as后边的变量前加上了一个引用符号&以此表示地址引用,如果这时候如果修改$items的值就相当于修改了数组元素的值。在PHP系统没有加

【星火】海思HI3516C开发板实战:基于LVGL与MPP库的行车记录仪/电子显微镜方案 本文详细介绍了基于海思HI3516CV500开发板,结合LVGL图形库与海思MPP媒体处理平台,实现行车记录仪与电子显微镜方案的完整实战过程。内容涵盖从系统环境搭建、驱动配置到应用开发的全流程,重点解析了MPP视频流处理管道与LVGUI界面协同工作的核心机制,为嵌入式音视频开发提供了可复用的参考方案。 阅读详情

相关推荐

Win11网络卡顿?用Wireshark抓包5分钟定位问题(保姆级实战)

本文详细介绍了如何使用Wireshark在Win11系统中快速定位网络卡顿问题。通过5分钟抓包分析,作者成功发现TCP重传率高达37%的罪魁祸首,并提供了从准备工作到实战分析的保姆级教程,帮助用户解决游戏卡顿、视频会议延迟等常见网络问题。

weixin_28839629的博客 289

单引号,双引号,javascript,HTML,转义字符

最近发现一个问题,是有关引号与转义的,于是就整理了一下这方面的知识,以方便以后温故。   双引号: ·在字串中使用变量   这个功能让你无须使用连接符号来粘和大量的简单字符串。PHP允许我们在双引号串中直接包含字 串变量,我们可以发现下面的两个字串的处理结果是相同的。 ·斜杠和SQL语句   生成HTML代码或SQL查询语句是编写PHP程序时经常遇到而且是件有趣的事情。为什么这么说呢

java journey 1万+

(SEED-Lab)Buffer Overflow Vulnerability Lab缓冲区溢出实验

(SEED-Lab)Buffer Overflow Vulnerability Lab 欢迎大家访问我的GitHub博客 https://lunan0320.cn 文章目录一、实验目的二、实验步骤与结果2.1 环境初始化2.2 Task1 运行shellcode2.3漏洞程序2.4 Task 22.5 Task 3: ASLR2.6 Task 4: Stack Guard2.7 Task 5:不可执行栈三、参考文献 一、实验目的 理解缓冲区溢出攻击的原理以及如何实施攻击 理解针对缓冲区溢出的防御措施

lunan的博客 8948

java双引号转义字符_好程序员Java教程分享常见的转义字符

原标题:好程序员Java教程分享常见的转义字符好程序员Java教程分享常见的转义字符,在Java字符常量中,反斜杠(\)是一个特殊的字符,被称为转义字符,它的作用是用来转义后面一个字符。转义后的字符通常用于表示一个不可见的字符或具有特殊含义的字符,例如换行(\n)。下面列出一些常见的转义字符。\r表示回车符,将光标定位到当前行的开头,不会跳到下一行。\n表示换行符,换到下一行的开头。\t表示制表符...

weixin_33028765的博客 1万+

java 双引号替换为转义双引号

Java 中双引号替换为转义双引号的实现 在 Java 编程中,我们常常需要处理字符串,有时在字符串中需要使用双引号。为了让 Java 正确识别双引号,我们需要将其替换为转义双引号(即 \")。下面,我将向你介绍实现这一功能的步骤及其代码。 实现流程 为了简单明了,我们可以将整个过程分为几个步骤。以下是一个简单的流程表格:...

weixin_36792978的博客 1352

java 反斜杠 数字_反斜杠加3个数字是什么编码?JAVA转义序列、转义字符汇总。 | 学步园...

8进制表示法.将以上每组按8进制转换成16进制是E5 A4 A7 E5 AE B6 E5 A5 BD汉字的UTF-8码, 以上三个字每字三字节.如果用JS的话,可以用encodeURI方法进接对汉字进行编码,得到 %E5%A4%A7%E5%AE%B6%E5%A5%BD 然后将每组16进制转换为8进制,将%替换为\就行了.//将“大家好。” 转成反斜杠加三数字(八进制转义序列)的java代码如下:p...

weixin_29363945的博客 1154

转义字符

转义字符 含义 \0 空格 \' 单引号 \" 双引号 \\ 反斜杠 \n 换行 \r 回车 \v 垂直制表符 \t 水平制表符 \b 退格 \f 换页 \uXXXX unicode码 \u{X} ... \u{XXXXXX} unicode码 ...

瓜冬瓜的博客 717

Jenkins pipeline单引号双引号转义字符

文章目录Jenkins pipeline单引号双引号转义字符前言Jenkins pipeline例子小结参考文档 Jenkins pipeline单引号双引号转义字符 前言 Jenkins pipeline的单引号双引号转义字符的语法和Linux shell中的语法一致。 单引号' 在单引号之间的所有特殊字符都失去了特殊含义 双引号"' 在双引号之间的绝大多数特殊字符都失去了特殊含义,...

锐意工作室 1万+

正则 转义单引号双引号_谈谈PHP中的单引号双引号

我们在做字符串拼接的时候,有多种方式,最常用的莫过于使用单引号双引号拼接了,当让sprintf()也用的比较多,但每次在使用单引号双引号时,总会纠结使用哪一种方式,不知道你们有没有纠结过,所以今天来仔细研究下。单引号我们先来看个单引号的例子:$s = 'world';echo 'hello ' . $s; // hello worldecho 'hello $s'; // hello $s从上...

weixin_40008644的博客 634

SHELL的单引号'',双引号"",及$字符单双引号及字符转义的小结

<br />在shell运行命令中,单双引号总能引起或多或少的话题讨论,这边做个小总结<br /> <br />先看以下例子:<br />sosodream@ubuntu:~>echo '/t'|xxd + xxd + echo '/t' 0000000: 5c74 0a /t. sosodream@ubuntu:~>echo -e '/t'|xxd + xxd + echo -e '/t' 0000000: 090a

星晨大海 1万+

Python—单引号双引号转义符、换行

1. Python中的单引号双引号 Python中的单引号双引号在单独使用时作用一样,都可以用来表达字符串,就相当于拼音输入法和五笔输入法都能打出汉字,但输入的内容不同而已。

zzhe 5931

velocity 单引号双引号转义

velocity 通过 #set($var=...)  为变量赋值时,如果等号右侧是用双引号引起来的字符串,则会对字符串中的变量进行解析,如: #set($var1 = "test1") #set($var2 = "test2_$var1") $var2 --> 将输出 test2_test1 如果是用单引号引起来的,则不会对引号中的变量进行解析(上面的 $var2 将输出 test2$v

旺仔专栏 1万+

php单引号,php中的单引号双引号转义字符详解

PHP单引号双引号均可以修饰字符串类型的数据,如果修饰的字符串中含有变量(例$name);最大的区别是: 双引号会替换变量的值,而单引号会把它当做字符串输出。例如:结果:字符串$name字符串string转义字符,顾名思义会将规定的语法用"\"来输出。但语法规定在不同的系统中转义字符的作用不同,例如:windows下的回车换行符用"\r"或"\n",而Linux 这两就有很大的区别:"\r"光标...

weixin_36049183的博客 2248

java html 双引号转义,java如何将单引号转义

java如何将单引号转义[2021-02-09 22:01:08]简介:php单引号双引号的区别:1、单引号双引号中都可以使用转义字符【\】,但只能转义单引号中引起来的单引号转义转义符本身;2、单引号字符串中出现的变量不会被变量值替代,而php单引号双引号的区别是:1、双引号内部变量会被解析,而单引号内部则不解析;2、双引号中的变量和特殊字符会被转义,而单引号中的内容不会被转义。在...

weixin_39631689的博客 2620

1-5 单引号双引号转义字符

一、 单引号双引号(适用于处理格式比较简单的字符串) 比如,我们想在屏幕输出“hello world”,我们可以以单引号开头单引号结尾,或者是双引号开头,双引号结尾 print('hello word') print("hello word") 二、 三个单引号或者三个双引号(适用于格式比较复杂的字符串) 假如我想打印下面这段文字,但是文字里面有一个单引号和两个双引号 那么,如果我们在print函数里面,以单引号开头,单引号结尾来打印这段文字,可以发现程序会报错。 如果我们在print函数里面,以双

weixin_42820233的博客 1万+

shell转义单引号双引号,反撇号

参考博客: https://www.cnblogs.com/mydomain/archive/2011/10/15/2213017.html 1、转义 单引号双引号都能关闭shell对特殊字符的处理。不同的是,双引号没有单引号严格,单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反撇号③反斜杠,这3种特殊字符不被忽略;不忽略美元符号意味着shell在...

m0_37683327的博客 4292

Html单引号双引号转义

&apos;是单引号转义符 &quot;是双引号转义

随笔记录 1910

bash引号和转义 - 单引号双引号的区别

以下两条命令虽然执行结果相同,但是处理过程却不同,读了本文再思考它们哪里不同。 无引号 "\" 可以使所有字符失去特殊含义。比如 "\*" 、 "\$" 被转义为 "*" 、 "$"。 需注意 "\t" 、"\n" 会被转义为 "t" 和 "n" ,而不是制表符和换行符。 由于换行符(回车)在无引号模式,会导致命令直接执行,所以也可以说是一个特殊字符。因此 "\回车符" 也会失去特殊含义。 转义前表示 \* \$ ...

qq_33439820的博客 949

mysql转义单引号双引号_[转] mysql 单引号 双引号

今天在写一条sql语句的时候,用的双引号sql语句执行错误。记的同事问我mysql语句中的单引号双引号有区别吗?回答是没有区别。今天特地查了查,还是有点区别的。mysql中的一段说明:在mysql中,使用单引号双引号俩种表达方法是一样的,尽管使用单引号的表达方法符合ANSI-SQL/92标准。如果在字符串里有引号,则要用以下的不同方式来表示:"abc'abc" 即 abc'abc"abc""...

weixin_42306938的博客 3810

js、html中的单引号双引号及其转义使用

一. 主要转义对应 &amp;apos;     ----单引号 $#39;        ----单引号(兼容IE) &amp;quot;      -----双引号 二.问题来源 在一个网页中的按钮,写onclick事件的处理代码,不小心写成如下: &lt;input value="Test" type="button" onclick="alert(""OK"");"

fighting_DW 2506

openEuler 系统中单引号双引号转义字符的应用

单引号双引号转义字符在 openEuler 系统中有着广泛的应用,正确理解和使用它们对于高效的编程和命令行操作至关重要。本文详细介绍了单引号双引号转义字符在 openEuler 系统中的各种应用场景、使用方法、代码示例、原理分析、常用方式以及注意事项等内容。通过学习本文,读者可以更好地掌握这些重要的字符串处理工具,提高在 openEuler 系统中的编程和命令行操作效率。在实际应用中,需要根据具体情况选择合适的字符串处理方式,灵活运用单引号双引号转义字符,以实现高效的字符串处理。

cgqyw的专栏 1447
上一篇: 反射获取方法参数与返回值类型
下一篇: jsp页面防止刷新重复提交解决方案 .
wuzfxx
博客等级 码龄15年 9粉丝 17原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值