1、定義字串
在php中,字串的定義可以使用單引號,也可以使用雙引號。但是必須使用同一種單或雙引號來定義字串,如:『hello"和「hello'為非法的字串定義。
定義字串時,只有一種引號被視為定義符,即單引號或雙引號。於是,如果乙個字串由雙引號開始,那麼只有雙引號被分析器解析。這樣,你就可以在雙引號串中包含任何其他字元,甚至單引號。下面的引號串都是合法的:
php**
$s = "i am a 'single quote string' inside a double quote string";
$s = 'i am a "double quote string" inside a single quote string';
$s = "i am a 'single quote string' inside a double quote string";
$s = 'i am a "double quote string" inside a single quote string';
而串 "why doesn't "this" work?" 則會被分為三段。如果在這個串中想要表示出雙引號,則可以使用轉義符"\"(反斜線),變成 "why doesn't \"this\" work?" 即可。
2、字串變數中的單、雙引號
php允許我們在雙引號串中直接包含字串變數,我們可以發現下面的兩個字串的處理結果是相同的。
$full_name = $first_name . ' ' . $last_name;
$full_name = "$first_name $last_name";
單引號串和雙引號串在php中的處理是不相同的。雙引號串中的內容可以被解釋而且替換,而單引號串中的內容總被認為是普通字元。例如:
php**
$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
$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語法分析器對單引號串 的處理方式比較單純,而雙引號的處理由於串內部也需要解析,因此更複雜些,所以處理速度略慢。
在字串中引用複雜的變數組合時,可能會產生一些問題,下面的**會正常工作:
php**
echo "value = $foo";
echo "value = $a[$i]";
echo "value = $foo";
echo "value = $a[$i]";
而下面的**卻不能得到我們希望的結果:
echo "value = $a[$i][$j]"; //我們希望列印二維陣列$a的某個元素。
為避免這些字串使用中的潛在問題,我們通常把複雜的變數從字串中分離開來,就像這樣:echo 'value = ' . $a[$i][$j];//字串的連線用點(.)
還有一種辦法是將複雜變數用花括號括起來,語法分析器就能正確辨認了:
echo "value = " //列印二維陣列$a的某個元素
這樣,又出現新問題了。當我們想在字串中引用花括號字元本身時,就要記得使用轉義符了:
php**
$var = 3;
echo "value = "; // 列印結果 "value = 3"
echo "value = \"; // 列印結果 "value = "
$var = 3;
echo "value = "; // 列印結果 "value = 3"
echo "value = \"; // 列印結果 "value = "
3、在sql語句中
這是會經常遇到的問題,在插入資料庫的sql語句是採用單引號來定義字串,如果要將乙個含有單引號的字串插入資料庫,這個sql語句就會出錯。
如:$sql="insert into userinfo (username,password) values('o'kefee','123456')"
此時,處理的方法之一是在sql語句中加入轉義符反斜線,
即:……values('o\'kefee',……
當然也可以使用函式 addslashes(),該函式的功能就是加入轉義符,
即:$s = addslashes("o'kefee") ……values('".$s."',……
還有一種方法是設定php.ini中的magic-quotes選項,開啟該選項,則通過表單提交的資訊中如果有單引號是,將會自動加上如轉義符。因此不用使用其他函式了。
補充: 這就要從雙引號和單引號的作用講起: 雙引號裡面的字段會經過編譯器解釋然後再當作html**輸出,但是單引號裡面的不需要解釋,直接輸出。
例如:
$abc='i love u';
echo $abc //結果是:i love u
echo '$abc' //結果是:$abc
echo "$abc" //結果是:i love u
所以在對資料庫裡面的sql語句賦值的時候也要用在雙引號裡面sql="select a,b,c from ..." 但是sql語句中會有單引號把欄位名引出來
例如:select * from table where user='abc';
這裡的sql語句可以直接寫成sql="select * from table where user='abc'"
但是如果象下面:
$user='abc';
sql1="select * from table where user=' ".$user." ' ";對比一下
sql2="select * from table where user=' abc ' "
我把單引號和雙引號之間多加了點空格,希望你能看的清楚一點。
也就是把'abc' 替換為 '".$user."'都是在乙個單引號裡面的。只是把整個sql字串分割了。 sql1可以分解為以下3個部分
1:"select * from table where user=' "
2:$user
3:" ' "
字串之間用 . 來連線,這樣能明白了吧。
PHP單引號和雙引號區別
雙引號裡面的字段會經過編譯器解釋,然後再當作html 輸出。單引號裡面的不進行解釋,直接輸出。從字面意思上就可以看出,單引號比雙引號要快了。例如 abc my name is tome echo abc 結果是 my name is tom echo abc 結果是 abc echo abc 結果是...
PHP中單引號和雙引號的區別
php把單引號中的資料視為普通字串,不再處理。而雙引號還要對其中的字串進行處理,比如遇到 了會把其後的內容視為變數。即 單引號裡面的 變數名 不被替換。雙引號裡面的 變數名 會被替換。例如 name hello echo the name 會輸出 the hello 而如果是單引號 name hel...
PHP中單引號和雙引號的區別
關於單引號和雙引號的區別和效率問題。很多朋友了解的不是很清楚,一直以為php中單引號和雙引號是互通的,直到有一天,發現單引號和雙引號出現錯誤的時候才去學習研究。所以今天再拿出來談談他們的區別,希望大家不要再為此困惑。雙引號裡面的字段會經過編譯器解釋,然後再當作html 輸出。單引號裡面的不進行解釋,...