PHP學習筆記 7 各種換行符和換行中的錯誤一則

2022-03-10 16:19:09 字數 1760 閱讀 1121

先說說換行和回車之間的區別和聯絡.要說這個得先說說這兩個符號的來歷:

在電腦沒出現之前有一種東西叫做電傳機.這東西每一秒鐘可以輸出10個字元.但是有個缺陷就是當一行結束的時候如果想換行.搭載筆頭的小車需要0.2秒才能回到行的初始位置.那麼在這0.2秒內傳來的資料就會丟失.為了解決這個問題.科學家想出了乙個辦法.就是在每行結束的時候輸入二個表示結束的標示.乙個叫做換行.告訴機器另外起一行.乙個是回車.告訴機器讓搭載筆頭的小車回到行的起始位置.而輸入這兩個字元所用的時間正好是0.2秒.

-------------------------華麗的分割線----------------------------------

換行和回車在近代的計算機裡面的表示為

換行->\n ascii**是10, 十六制為0x0a.   

回車->\r 十進位制ascii**是13, 十六進製制**為0x0d;

這是兩個不同的符號.

在unix系統和linux系統裡面.每行的結束標示是只有乙個換行 即\n

---當時的儲存介質成本很高.這樣做的目的是為了節省儲存空間.

在mac和ios系統裡面.每行的結束標示只有乙個回車 即\r

---這個我就不知道是怎麼想的了

而在windows系統裡面.繼承了電傳機的優秀傳統.每行的結束部分為\r\n

這樣的直接結果是在mac和linux系統裡面的檔案拿到windows裡面來會全部變成一行

基於各個系統對行的不同表示法,在程式設計過程中就會出現很多意想不到的錯誤和bug.

下面就說我在實際工作中遇到的一件事情.

---------------------------------華麗的分割線----------------------------

問題描述:開發了一套能夠自動領取啟用碼的系統.但是由於系統記憶體分配的限制.每次只能錄入10000行啟用碼.當有更多的啟用碼需要錄入的時候.就要反覆多次錄入.在php程式中.使用explode();函式來分割錄入的啟用碼.以\n作為分割符號.如果只錄入一次的話.是沒有問題的.但是如果錄入兩次.會出現實際上重複的一行.而在資料庫中又不會進行排重.此時當有人領取到了重複的啟用碼將出現無法兌換情況.

問題成因:經過反覆推敲和診斷.總結出問題的成因如下.當錄入第一批啟用碼的時候.由於是在windows平台下錄入的.每行的結束處是\n\r兩個字元.分割過程中 .每行存在資料庫中的內容是啟用碼內容加上\r 當再次編輯的時候.實際顯示出來的是每個"啟用碼+\r"但是\r在瀏覽器中是不可見字元.無法實現換行.並且由於在分割過程中使用\n分割.所以當重新編輯顯示在前端過程中.在每行的結束部分又重新新增上\n來實現換行.但是最後一行並不是這個情況.因為使用implode()來連線字串.所以在最後一行的時候依舊是\r結束的表示.並且並沒有換行.此時為了實現換行.又重新在行結束位置輸入了回車.此時最後一行的形式為:"啟用碼+\r+\r\n"   當再次點選提交的時候.由於是拿\n分割的,所以此時最後一行會被分割為"啟用碼+\r+\r".這與之前的最後一條啟用碼肉眼看去是一樣的,但是實際上之前最後一條啟用碼是"啟用碼+\r".再次插入資料庫的過程中.會出現兩條最後一條啟用碼.因為對於資料庫來說."啟用碼+\r+\r"與"啟用碼+\r"是兩條不一樣的資料.

解決方法:這個問題可能對於一般人來說根本算不上什麼問題.但是在實際工作中遇到了.就總結下.此時.只要修改explode的條件.把分割符修改為\r,\n,\r\n的陣列就ok .問題將迎刃而解.

------------------------------------------分割線--------------------------

總結:可能只是一些小的細節問題.分析解決問題的過程是值得享受的.

php中的換行符

更正 下面文章的說法有誤,不是php的換行符,換行符還是 n,而是php的文字結束符在不同的平台下有不同的表現,如下文所示。今天執行了一下 php和mysql web開發 第二章的例子。發現給表單輸入內容並提交之後,頁面反饋檔案儲存成功,開啟orders.txt來看,確實也輸進去了,但是不能換行。回...

txt中的換行符和sublime中的換行符

乙個ansi編碼的文字檔案,在txt編輯器中開啟,輸入乙個enter,用hexeditor開啟後一看,發現多了兩個位元組,分別是 r和 n 如果用sublime編輯器裡開啟,輸入乙個enter,用hexeditor開啟後可以發現,和上面是一樣的。此外,對於ansi編碼的檔案,檔案開頭是沒有特殊的標記...

php中的PHP EOL換行符詳細解析

在unix系列用 n 在windows系列用 r n 在mac用 r php中可以用php eol來替代,以提高 的源 級可移植性 比如 複製 cilpuv代www.cppcns.com碼如下 echo php eol windows平台相當於 nb程式設計客棧sp echo r n 程式設計客棧 ...