麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > PHP > 正文

PHP教程-網(wǎng)站開發(fā)編程中的特殊符號(hào)處理

2020-03-24 18:58:16
字體:
供稿:網(wǎng)友
1 PHP中單引號(hào)與雙引號(hào)的區(qū)別


在PHP中,通常一個(gè)字符串被定義在一對(duì)引號(hào)中,如:

'I am a string in single quotes'
I am a string in double quotes

html' target='_blank'>PHP語法分析器是用成對(duì)的引號(hào)來判斷一個(gè)字符串的。因此,所有字符串必須使用同一種單或者雙
引號(hào)來定義開始和結(jié)束。例如,下面的字串定義是不合法的:

I am not a valid string since I have unmatching quote marks'
'Me neither!

定義字符串時(shí),只有一種引號(hào)被視為定義符,即單引號(hào)或雙引號(hào)。于是,如果一個(gè)字符串由雙引
號(hào)開始,那么只有雙引號(hào)被分析器解析。這樣,你就可以在雙引號(hào)串中包含任何其他字符,甚至單引
號(hào)。下面的引號(hào)串都是合法的:

$s = I am a 'single quote string' inside a double quote string
$s = 'I am a double quote string inside a single quote string';

當(dāng)PHP遇到與串的開頭相對(duì)應(yīng)的引號(hào)時(shí),便認(rèn)為已經(jīng)到了字符串尾部,于是:

Why doesn't this work?

實(shí)際上被PHP語法分析器分成三個(gè)部分:

Why doesn't 包含一個(gè)單引號(hào)的雙引號(hào)串
this 多余的字符,分析器無法處理
work? 普通字符串

上面的這個(gè)例子企圖在雙引號(hào)串中包含雙引號(hào),而分析器在遇到第二個(gè)雙引號(hào)時(shí)便認(rèn)為字符串結(jié)
束了。要達(dá)到包含引號(hào)的目的,必須分析器在遇到串內(nèi)普通引號(hào)的時(shí)候忽略它的原意,我們?cè)谝?hào)的
前面加上一個(gè)反斜杠來告訴PHP:這個(gè)引號(hào)是字符串的一部分,正確的表示方法是這樣:

Why doesn't / that/ work?

在英文字符串中一個(gè)常見的問題是撇號(hào)'的使用,因?yàn)樗褪且粋€(gè)單引號(hào),而在英文串中十分常見
(英文所有格)。你必須小心處理這些字符:

'You/'d better escape your apostrophes'

可以看到反斜杠在字符串中有他的特殊含義,當(dāng)我們需要在字符串中包含反斜杠本身時(shí),需要在
該符號(hào)前面多加一個(gè)反斜杠。例如:

$file = c:/windows/system.ini
echo $file; // 打印結(jié)果為: c:windowssystem.ini
$file = c://windows//system.ini
echo $file; // 打印結(jié)果為: c:/windows/system.ini

另一種字符串定義方式,能夠消除特殊字符的煩惱,而且便于引用較長(zhǎng)的文本。該字符串定義方
法以 符號(hào)緊跟一個(gè)自定義字符串開頭,最后一行以該自定義字符串結(jié)束,并且必須頂格。


二、字串的連接

字串可以使用字串連接符(.)來連接,如:

$first_name = 'Charlie';
$last_name = 'Brown';
$full_name = $first_name . ' ' . $last_name;

常見的用途是建立大塊的HTML字串代碼,賦值號(hào) (=) 連接符 (.) 可以被簡(jiǎn)寫合并為 (.=) 符
號(hào),如:

$html = ' table
$html .= ' tr td number /td td square /td /tr
for ( $i=0 ; $i $i++) {
$square = $i * $i;
$html .= ' tr td ' . $i . ' /td td ' . $square . ' /td /tr
}
$html .= ' /table


三、在字串中使用變量

這個(gè)功能讓你無須使用連接符號(hào)來粘和大量的簡(jiǎn)單字符串。PHP允許我們?cè)陔p引號(hào)串中直接包含字
串變量,我們可以發(fā)現(xiàn)下面的兩個(gè)字串的處理結(jié)果是相同的。

$full_name = $first_name . ' ' . $last_name;
$full_name = $first_name $last_name

單引號(hào)串和雙引號(hào)串在PHP中的處理是不相同的。雙引號(hào)串中的內(nèi)容可以被解釋而且替換,而單引
號(hào)串中的內(nèi)容總被認(rèn)為是普通字符。例如:

$foo = 2;
echo foo is $foo // 打印結(jié)果: foo is 2
echo 'foo is $foo'; // 打印結(jié)果: foo is $foo
echo foo is $foo/n // 打印結(jié)果: foo is 2 (同時(shí)換行)
echo 'foo is $foo/n'; // 打印結(jié)果: foo is $foo/n

正如你所看到的,在單引號(hào)串中甚至反斜杠也失去了他的擴(kuò)展含義(除了插入反斜杠//和插入單

2 PHP中單引號(hào)與雙引號(hào)的區(qū)別引號(hào)/')。所以,當(dāng)你想在字串中進(jìn)行變量代換和包含/n(換行符)等轉(zhuǎn)義序列時(shí),你應(yīng)該使用雙引
號(hào)。單引號(hào)串可以用在其他任何地方,腳本中使用單引號(hào)串處理速度會(huì)更快些,因?yàn)镻HP語法分析器對(duì)
單引號(hào)串的處理方式比較單純,而雙引號(hào)的處理由于串內(nèi)部也需要解析,因此更復(fù)雜些,所以處理速
度略慢。

在字符串中引用復(fù)雜的變量組合時(shí),可能會(huì)產(chǎn)生一些問題,下面的代碼會(huì)正常工作:

echo value = $foo
echo value = $a[$i]

而下面的代碼卻不能得到我們希望的結(jié)果:

echo value = $a[$i][$j] //我們希望打印二維數(shù)組$a的某個(gè)元素。

為避免這些字串使用中的潛在問題,我們通常把復(fù)雜的變量從字串中分離開來,就像這樣:

echo 'value = ' . $a[$i][$j];

還有一種辦法是將復(fù)雜變量用花括號(hào)括起來,語法分析器就能正確辨認(rèn)了:

echo value = {$a[$i][$j]} //打印二維數(shù)組$a的某個(gè)元素

這樣,又出現(xiàn)新問題了。當(dāng)我們想在字串中引用花括號(hào)字符本身時(shí),就要記得使用轉(zhuǎn)義符了:

$var = 3;
echo value = {$var} // 打印結(jié)果 value = 3
echo value = /{$var} // 打印結(jié)果 value = {3}


三、斜杠和SQL語句

生成HTML代碼或SQL查詢語句是編寫PHP程序時(shí)經(jīng)常遇到而且是件有趣的事情。為什么這么說呢, 因?yàn)檫@涉及到生成另外一種類型的代碼,你必須仔細(xì)地考慮和遵循這種代碼所要求的編寫語法和規(guī)則。

我們來看這樣一個(gè)例子,假如你想查詢數(shù)據(jù)庫中名字是 O'Keefe 的用戶,通常SQL語句的形式是這樣的:

select * from users where last_name = 'O/'Keefe'

請(qǐng)注意SQL語句這個(gè)英文所有格(撇號(hào))需使用反斜杠轉(zhuǎn)義。PHP專門提供了一些函數(shù)來處理這樣的情況,函數(shù)AddSlashes($str)的用途就是自動(dòng)在字串中對(duì)引號(hào)字符插入反斜杠轉(zhuǎn)義符:

$last_name = O'Keefe
$sql = select * from users where last_name = ' . addslashes($last_name) . '

在這個(gè)例子中,你還要在last_name字串外面括上單引號(hào)(SQL語法要求),由于這里使用的是雙引號(hào)串,所以對(duì)這對(duì)單引號(hào)就無須使用轉(zhuǎn)義了。下面的這個(gè)語句是使用單引號(hào)串的等價(jià)形式:

$sql = 'select * from users where last_name = /'' . addslashes($last_name) . '/'';

任何時(shí)候你要在數(shù)據(jù)庫中寫入字串,你都必須確保里面的引號(hào)正確使用了轉(zhuǎn)義符號(hào),這是很多PHP 初學(xué)者常犯的錯(cuò)誤。


四、雙引號(hào)和HTML

與SQL語句不同,在標(biāo)準(zhǔn)HTML語言中雙引號(hào)常被用來表示字串(現(xiàn)在很多瀏覽器具備較強(qiáng)的容錯(cuò)功能,允許在HTML中用單引號(hào)甚至不用引號(hào)表示字符串),例如:

$html = ' a href= '.$url.' '.$link.' /a
$html = a href=/ $url/ $link /a

HTML語言不支持反斜杠轉(zhuǎn)義,這一點(diǎn)在我們使用表單的hidden inputs來傳輸數(shù)據(jù)的時(shí)候就會(huì)有所體會(huì)了。設(shè)置hidden inputs的值的最好辦法,是使用htmlspecialchars()函數(shù)來編碼。下面的語句可以正常傳輸一個(gè)可能包含雙引號(hào)的數(shù)據(jù):

input type=hidden name=var value= ?php echo htmlspecialchars($var) ?


一、引號(hào)定義字符串。要達(dá)到包含引號(hào)的目的, 必須分析器在遇到串內(nèi)普通引號(hào)的時(shí)候忽略它的原意,我們?cè)谝?hào)的 前面加上一個(gè)反斜杠來告訴PHP:這個(gè)引號(hào)是字符串的一部分,正確的表示方法是這樣:單引號(hào)串可以用在其他任何地方,腳本中使用單引號(hào)串處理速度會(huì)更快些,因?yàn)镻HP語法分析器對(duì) 單引號(hào)串的處理方式比較單純,而雙引號(hào)的處理由于串內(nèi)部也需要解析,因此更復(fù)雜些,所以處理速 度略慢。

這個(gè)...雙引號(hào)轉(zhuǎn)義,單引號(hào)不轉(zhuǎn)義
如:/r/n是換行,但是如果你用單引號(hào)寫入文件,不會(huì)是換行,而是一個(gè)字符,如果用雙引號(hào)寫入文件,就是換行.html教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美日韩亚洲一区二区三区 | 九九热精品视频在线播放 | 国产精品久久久久一区二区 | 黄视频网站免费在线观看 | 亚洲一区二区三区视频 | 黄色作爱视频 | 欧美一级免费视频 | 日日艹夜夜艹 | 日本高清无遮挡 | 曰韩在线视频 | 露脸各种姿势啪啪的清纯美女 | 嗯~啊~弄嗯~啊h高潮视频 | 久久国产精品久久久久久 | 欧美一级黄色免费看 | 黄色毛片视频在线观看 | 久久不射电影网 | 91短视频在线视频 | 中国精品久久 | 日韩欧美精品中文字幕 | 久久精品小短片 | 欧美日韩大片在线观看 | 日韩电影av在线 | 精品久久久久久亚洲精品 | 欧美黄色一区 | 久久久久久久久国产 | 九九热视频这里只有精品 | 在线观看视频日本 | 成人在线视频网 | 午夜视频在线观看免费视频 | 毛片免费观看日本中文 | 欧美精品成人一区二区三区四区 | 久久久成人动漫 | 欧美精品色精品一区二区三区 | 午夜热门福利 | 中文在线免费观看 | 久久精品伊人网 | 国产高清成人久久 | 欧美精品成人一区二区在线观看 | 国产免费黄网 | 免费看欧美一级特黄a大片 久久免费视频一区二区三区 | 线观看免费完整aaa 一二区成人影院电影网 |