PHP 學習總結之字串

來源:互聯網
上載者:User
本篇文章給大家分享了關於PHP中的字串學習的知識,有需要的朋友可以參考一下

建立

PHP 支援 4 種方式來建立一個字串:單引號、雙引號、heredoc 文法結構和 nowdoc 文法結構。

1. 單引號

在單引號字串中,變數和特殊字元將不會被轉義替換,除了反斜線和單引號本身:

echo 'Arnold once said: "I\'ll be back"'; # Arnold once said: "I'll be back"echo 'You deleted C:\\*.*?'; # You deleted C:\*.*?
2. 雙引號

能夠識別字串中的變數和逸出序列:

$juice = 'apple';echo "$juice juice."; # apple juice.echo "Hello \nWorld!";#Hello#World!
3. heredoc 文法結構

與雙引號字串相似。結束標記必須頂頭寫,不能有縮排和空格,且在結束標記末尾要有分號;標記之間的變數可以被正常解析,但是函數則不可以。常用在輸出包含大量 HTML 文檔的時候。

$str = 'heredoc';$html = <<<END<p class="container">    <p class="row">        <p class="col-xs-4">            <p>$str</p>        </p>    </p></p>END;echo $html;#<p class="container">#    <p class="row">#        <p class="col-xs-4">#            <p>heredoc</p>#        </p>#    </p>#</p>
4. nowdoc 文法結構

heredoc 文法結構字串相似,但是 nowdoc 不進行變數和逸出序列的解析操作。

$str = 'nowdoc';$html = <<<'END'<p class="container">    <p class="row">        <p class="col-xs-4">            <p>$str</p>        </p>    </p></p>END;echo $str;#<p class="container">#    <p class="row">#        <p class="col-xs-4">#            <p>$str</p>#        </p>#    </p>#</p>

字串編碼

在 PHP 字串中,每個字元使用一個位元組儲存(記憶體中),這意味著 PHP 只能支援 256 的字元集,因此不支援 Unicode。

PHP 中的 string 的實現方式是一個由位元組組成的數組再加上一個整數指明緩衝區長度。並無如何將位元組轉換成字元的資訊,由程式員來決定。由於 PHP 並不特別指明字串的編碼,那字串到底是怎樣編碼的呢?答案是字串會被按照該指令檔相同的編碼方式來編碼。

一般情況下,雖然 PHP 內部不支援 Unicode 字元集,但是檔案支援 UTF-8 編碼,絕大部分情況下不會有什麼問題,但是遇到字串編碼轉換的時候就有問題了,比如在一個 UTF-8 編碼的 PHP 檔案中,程式輸出的字元數(6)並不等於實際的字元數(2):

echo strlen('中國'); # 6
mbstring 提供了針對 多位元組字串的函數,能夠幫你處理 PHP 中的多位元組編碼。 除此以外,mbstring 還能在可能的字元編碼之間相互進行編碼轉換。

因此,當需要操作 Unicode 字元集的字串時候,請務必安裝 mbstring 擴充,並使用相應的函數代替原生的字串函數:

echo mb_strlen('中國', 'UTF-8'); # 2
mbstring 擴充大部分的函數都需要基於一個編碼(內部編碼)來處理,請務必統一使用 UTF-8 編碼,這個大部分可以在 PHP.INI 中配置。

對於 PHP 字串編碼問題,強烈建議:

  1. PHP 指令檔使用 UTF-8 無 BOM 編碼格式;

  2. 字串操作使用 mbstring 擴充函數;

  3. 資料庫的串連和儲存使用 UTF-8 編碼;

  4. HTML 文檔使用 UTF-8 編碼。

字串格式化

1. 字串去除

rtrim() — 刪除字串末端的空白字元(或者其他字元)
ltrim() — 刪除字串開頭的空白字元(或其他字元)
trim() — 去除字串首尾處的空白字元(或者其他字元)

$text = "\t\tThese are a few words :) ...  \n";echo rtrim($text); # "\t\tThese are a few words :) ..."echo ltrim($text); # "These are a few words :) ...  \n"echo trim($text);  # "These are a few words :) ..."$trimmed = trim($hello, "ld"); # "Hello Wor"
2. 格式化字串以便輸出

nl2br() — 在字串所有新行之前插入 HTML 換行標記
printf() — 輸出格式化字串
sprintf() — 把格式化的字串寫入變數中

echo nl2br("hello \nworld");#hello #worldprintf('I need to pay $%.02lf', 1.3568); # I need to pay $1.36$str = sprintf('I need to pay $%.02lf', 1.3568);echo $str; # I need to pay $1.36

htmlspecialchars() — 將特殊字元轉換為 HTML 實體
htmlentities() — 將字元轉換為 HTML 逸出字元

echo htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES); # &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;echo htmlentities("A 'quote' is <b>bold</b>"); # A 'quote' is &lt;b&gt;bold&lt;/b&gt
3. 格式化字串以便儲存

stripslashes() — 反引用一個引用字串
addslashes() — 使用反斜線引用字串

$str = "Is your name O\'reilly?";echo stripslashes($str); # Is your name O'reilly?echo addslashes($str);   # Is your name O\'reilly?
4. 改變字串的字母大小寫

strtolower() — 將字串轉化為小寫
strtoupper() — 將字串轉化為大寫
ucfirst() — 將字串的首字母轉換為大寫
ucwords() — 將字串中每個單詞的首字母轉換為大寫

$str = "Mary Had A Little Lamb and She LOVED It So";echo strtolower($str); # mary had a little lamb and she loved it soecho strtoupper($str); # MARY HAD A LITTLE LAMB AND SHE LOVED IT SO$foo = 'hello world!';$foo = ucfirst($foo); # Hello world!$foo = ucwords($foo); # Hello World!

字串串連和分割

1. explode()

使用一個字串分割另一個字串:

$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";$pieces = explode(" ", $pizza);print_r($pieces); # Array ( [0] => piece1 [1] => piece2 [2] => piece3 [3] => piece4 [4] => piece5 [5] => piece6 )
2. implode() 或 join()

將一個一維數組的值拼接為字串:

$array = array('lastname', 'email', 'phone');echo implode(',', $array); # lastname,email,phone
3. substr()

返回字串的子串:

echo substr('abcdef', 1);     # bcdefecho substr('abcdef', 1, 3);  # bcdecho substr('abcdef', -1, 1); # f

字串比較

1. strcmp()

二進位安全字串比較(區分大小寫):

echo strcmp('jochen', 'Jochen'); # 32,如果 str1 小於 str2 返回 < 0; 如果 str1 大於 str2 返回 > 0;如果兩者相等,返回 0。
2. strcasecmp()

二進位安全比較字串(不區分大小寫):

echo strcasecmp('jochen', 'Jochen'); # 0
3. strnatcmp()

使用自然排序演算法比較字串:

echo strnatcmp('img12.png', 'img10.png'); # 1,

字串尋找和替換

1. strstr()

尋找字串的首次出現並返回字串:

echo strstr('name@example.com', '@'); # @example.com
2. strpos()

尋找字串首次出現的位置:

$hello = 'Hello World';if(strpos($hello, 'H') !== false) {    echo 'Find';} else {    echo 'No Find';}
3. str_replace()

匹配字串並替換:

$search = "world";$replace = "Shanghai";$subject = "Hello world!";echo str_replace($search, $replace, $subject); # Hello Shanghai
4. substr_replace()

替換指定位置的字串:

$replace = "Shanghai";$subject = "Hello world!";echo substr_replace($subject, $replace, 6); # Hello Shanghai

Regex

1. preg_match()

執行一個Regex匹配:

$email = '10001110@qq.com';$pattern = "/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([.a-zA-Z0-9_-])+([.a-zA-Z0-9_-]+)+([.a-zA-Z0-9_-])$/";if (preg_match($pattern, $email, $match)) {    echo '匹配成功<hr />';} else {    echo '匹配失敗<hr />';}
2. preg_match_all()

執行一個全域Regex匹配:

$str = "Name: <b>John Poul</b> <br> Title: <b>PHP Guru</b>";preg_match_all("/<b>(.*)<\/b>/U", $str, $result);print_r($result);# Array ( [0] => Array ( [0] => John Poul [1] => PHP Guru ) [1] => Array ( [0] => John Poul [1] => PHP Guru ) )
3. preg_split()

通過一個Regex分隔字串:

$keywords = preg_split("/[\s,]+/", "hypertext language, programming");print_r($keywords);# Array ( [0] => hypertext [1] => language [2] => programming )
4. preg_replace()

執行一個Regex的搜尋和替換:

$str = 'foo   o';echo preg_replace('/\s\s+/', ' ', $str); # 'foo o'$count = 0;echo preg_replace(array('/\d/', '/\s/'), '*', 'xp 4 to', -1 , $count); # xp***toecho $count; # 3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.