web操做, 主要就是對字符文本信息進行處理, 因此, 字符串操做幾乎佔了很大一部分的php操做.包括php
注意strstr 和 strtr的區別?
前者表示字符串查找返回字符串,後者表示字符串中字符替換:html
字符串替換
str_replace, 返回的是另外的結果, 原來的字符串不會被修改,至關於傳遞一個$haystack的副本linux
字符串截取:
中文截取模塊的名字是 :php_mbstring.dll
在index.php中,現實的模塊也是: mbstring.
只有在 代碼中才是: mb_substr...(前面兩個的mb和string都是挨着的...)
substr的第二個參數若是是負數,表示從最後面倒過來數
關鍵是要記住第三個參數就行了: 第三個參數不少時候默認缺省,表示截取到字符串結尾,
當第三個參數$length長度,爲負數的時候: 表示從最後面倒過來 數長度, 其實是 指 到倒數的位置時 截取就結束了。
可是,長度爲負數的時候,結束位置處的字符是不算的,不會包含在截取字符串中的。
這個特別適用於 去掉字符串最後幾個字符,如文件的擴展名的狀況。如:web
$filename = "abcd中文cccc.jpg"; echo $basename = substr($filename, 0, -4);
若是是中文的字符串截取, 就要使用 mb_substr, 最後一個參數指定字符集編碼. 爲何呢? 由於默認的substr截取字符串的長度是 以 一個字節爲 1個 "長度計量單位"的. 而utf8漢字是算三個字節長度的, gbk是算"2個字節長度的". 因此, 若是不是恰好截取到漢字的字節時, 就可能把 組成一個漢字的三個字節 硬生生的 截斷, 取其中的一個/兩個字節 來顯示, 天然就產生亂碼了.
這時, 使用mb_substr就會把1個漢字做爲 一個 字符長度 來看待了,也就不會有亂碼了.編程
支持中文字符串截取的模塊的名字是 :php_mbstring.dll
在index.php中,現實的模塊也是: mbstring.
只有在 代碼中才是: mb_substr...
substr,的第二個參數若是是負數,表示從最後面倒過來數
// 只要記住第三個參數就行了: 第三個參數不少時候默認缺省,表示截取到字符串結尾,
// 當第三個參數$length長度,爲負數的時候: 表示從最後面倒過來 數長度, 其實是 指 到倒數的位置時 截取就結束了。
// 可是,長度爲負數的時候,結束位置處的字符是不算的,不會包含在截取字符串中的。
// 這個特別適用於 去掉字符串最後幾個字符,如文件的擴展名的狀況。如:vim
$str = "abc中文字符串edf"; echo substr($str, 0,7); // 顯示有亂碼,或者後面的亂碼沒有顯示, 或者亂碼統一的用一個 方框 像「口」的 一半 來表示 echo mb_substr($str, 0, 7, 'utf8'); // 沒有亂碼,漢字做爲一個字符長度 來表示。
第一, 要讓頁面的編碼聲明和編輯器保存文件的實際編碼要一致, 如 dw和linux下的vim默認的都是用utf8來保存文件的, 而windows下的notepad等編輯器默認的保存文件是用gb2312,gbk等。 因此你最好在用dw或vim編輯保存文件時聲明爲 utf8.不然若是你聲明爲gb2312時,無論什麼瀏覽器(ff或ie),均可能出現亂碼。固然除非你手動設置瀏覽器的編碼格式, 恰好跟你編輯器實際保存的編碼相同時, 不會出現亂碼。
第二, 在ie中, 爲何有時候不是全部的狀況!!,在頁面中已經聲明瞭使用utf8編碼, 可是ie仍然出現亂碼。 而ff則不會。
這是因爲二者在解析網頁時的方式是不同的:
對於ff, 它是首先去讀取 http-request header的, 會首先 去讀取到 meta或php 的header中指定的 編碼字符集, 而後ff就會自動地 按照這個網頁指定的 編碼字符集去解析 文檔。 因此ff你 頁面指定的是什麼字符集, 就會按照什麼字符集去解析。
而對於ie則不一樣, 它並不會首先去 讀取http header中頁面指定的字符集。 而是首先 按照 「默認」 的字符集(windows是gb2312)來解析文檔, 或者若是你已經打開了ie並對編碼作了改動, 則當前ie窗口會保持設定值來解析後面的 全部文檔。 最後纔會去讀取 http header。(也就是說, ie是先解析標籤, 而後纔會去讀取http header) 而這時文檔已經被解析甚至已經被呈現出來了, 因此不會再返回去再修改。 只有等下一次手動修改ie編碼了....windows
ie爲何有時候顯示輸出空白頁?
對於用utf8編寫的web文檔, 用gb2312,或gbk解析時, 當title之間有 **奇數個漢字等全角字符時, 若是按照雙子節的編碼進行解析時, 就會造成 "半個漢字"的狀況, 而後這個 "半個漢字"和後面的</title>
結合在一塊兒,導致 ie覺得找不到title的結束標籤, 把後面的全部web內容都看成標題了, 從而就沒有輸出了.瀏覽器
單引號和雙引號 對於標籤和 轉義的區別?
對於標籤來講, 無論你是單引號, 仍是雙引號, 都是同樣的, 單雙引號對於標籤來講是沒有關係的。由於即便是按原樣輸出,標籤仍是同樣能被瀏覽器解析, 如br, p等。
有區別的, 只是 轉義字符, 對於單引號, 轉義是無效的, 按原樣輸出, 而對於雙引號, 纔會轉義,如\n, 使用時仍然要nl2br函數。編輯器
web文件的編碼字符集,不論是mea仍是header聲明, 只是告訴瀏覽器,個人編碼字符集是什麼, 如utf8, 只是"聲明", 實際具體是什麼編碼, 還要看真實的編輯器保存的編碼格式函數
字符串變量的定義??
雙引號中能夠包含變量, 可是因爲php的變量容許中文, 並且變量匹配是"貪婪匹配", 因此若是變量在字符串中間的時候, 要加上大括號{}來分隔定界. 固然若是在字符串的末尾, 變量沒必要加大括號.
字符串的定界符? 爲何要使用? 用途是: 在用字符串經常輸入大段的html代碼或js的時候, 裏面包含不少的標籤等, 你就要進行不少的單雙引號, 特殊符號等轉義, 這樣是很痛苦的, 因此可使用定界符就比較方便了. 並且, 定界符字符串會保留原來的格式,如回車/換行, 就至關於pre標籤. 定界符以 關鍵字 "尖括號<<<" 開始, 而後是定界符標識, 最後一行是定界符標識加分號. 格式要嚴格區分, 不能有多餘的空格和tab鍵等. 定界符的起始標識和結束標識, 就相對於編程中的大括號對{}同樣.