2013年1月 的存檔

php urlencode與rawurlencode的區別

2013年1月31日 1 條評論

urlencode的用途就是編碼字符串,把原字符串中所有除”-_”以為的非所有字母數字字符替換成百分號(%)后跟兩位十六進制數,但是需要注意:由于歷史原因會把空格替換+號。rawurlencode其實和urlencode一樣,也是用來編碼字符串的,唯一的不同是它是使用RFC1738 編碼,也就是會把空格替換成%20。

它們對應的解碼函數是urldecode和rawurldecode。參考官方網站的說明,urldecode解碼給出的已編碼字符串中的任何%##,加號(’+')被解碼成一個空格字符;rawurldecode解碼字符字符串中百分號(%)后跟兩位十六進制。有兩點區別,一是urldecode解碼是對百分號(%)后任意兩位字符都去會進行解碼,例如%MN也會解碼,但是會失敗;rawurldecode則只會對百分號(%)后兩位是十六進制(0-9A-F)的字符才會解碼,二是urldecode會把+號解碼為空格。

通過上面對解碼函數的描述,可以推論,使用urlencode或rawurlencode編碼的都可以使用urldecode進行解碼,但是如果原字符串中含有空格,使用urlencode編碼后的字符串使用rawurlencode解碼后獲得的字符串會和原字符串不同。

分類: PHP 標簽:

mysql date_add date_sub

2013年1月18日 沒有評論

mysql中內置函數date_add和date_sub能對指定的時間進行增加或減少一個指定的時間間隔,語法如下:

DATE_ADD(date,INTERVAL expr type)
DATE_SUB(date,INTERVAL expr type)

其中date是指定的日期,INTERVAL為關鍵詞,expr是具體的時間間隔,type是時間單位。注意:type可以復合型的,比如YEAR_MONTH。如果type不是復合型的,DATE_ADD和DATE_SUB其實可以通用,因為expr可以為一個負數。可用的type如下表:

MICROSECOND 間隔單位:毫秒
SECOND 間隔單位:秒
MINUTE 間隔單位:分鐘
HOUR 間隔單位:小時
DAY 間隔單位:天
WEEK 間隔單位:星期
MONTH 間隔單位:月
QUARTER 間隔單位:季度
YEAR 間隔單位:年
SECOND_MICROSECOND 復合型,間隔單位:秒、毫秒,expr可以用兩個值來分別指定秒和毫秒
MINUTE_MICROSECOND 復合型,間隔單位:分、毫秒
MINUTE_SECOND 復合型,間隔單位:分、秒
HOUR_MICROSECOND 復合型,間隔單位:小時、毫秒
HOUR_SECOND 復合型,間隔單位:小時、秒
HOUR_MINUTE 復合型,間隔單位:小時分
DAY_MICROSECOND 復合型,間隔單位:天、毫秒
DAY_SECOND 復合型,間隔單位:天、秒
DAY_MINUTE 復合型,間隔單位:天、分
DAY_HOUR 復合型,間隔單位:天、小時
YEAR_MONTH 復合型,間隔單位:年、月

對應復合型的type,需要使用引號對兩個參數進行引用起來,中間用任何非數字字符作為間隔即可,并且不能使用負數。但是時間間隔只指定了一個值,那么也能正常工作,但是對應XXX_YYY使用的單位為YYY,也就相當于單一單位的type,同時可以使用負數。復合型的用法如下:

mysql> select date_add('2013-01-18', interval '1 2' YEAR_MONTH);
+-----------------------------------------------------+
| date_add('2013-01-18', interval '1 2' YEAR_MONTH) |
+-----------------------------------------------------+
| 2014-03-18                                          |
+-----------------------------------------------------+

mysql> select date_add('2013-01-18', interval '1-2' YEAR_MONTH);
+----------------------------------------------------+
| date_add('2013-01-18', interval '1-2' YEAR_MONTH) |
+----------------------------------------------------+
| 2014-03-18                                         |
+----------------------------------------------------+

mysql> select date_add('2013-01-18', interval '1,2' YEAR_MONTH);
+---------------------------------------------------+
| date_add('2013-01-18', interval '1,2' YEAR_MONTH) |
+---------------------------------------------------+
| 2014-03-18                                        |
+---------------------------------------------------+

mysql> select date_add('2013-01-18', interval 1 YEAR_MONTH);
+-----------------------------------------------+
| date_add('2013-01-18', interval 1 YEAR_MONTH) |
+-----------------------------------------------+
| 2013-02-18                                    |
+-----------------------------------------------+

mysql> select date_add('2013-01-18', interval -1 YEAR_MONTH);
+------------------------------------------------+
| date_add('2013-01-18', interval -1 YEAR_MONTH) |
+------------------------------------------------+
| 2012-12-18                                     |
+------------------------------------------------+
分類: MySQL 標簽: ,

mysql ifnull

2013年1月17日 沒有評論

mysql內置的ifull函數可以用在查詢時候為NULL值字段給一個默認值,例如:

select ifnull(col1, 'default-value'), col2 from test;

當test表的col1字段為NULL時,數據庫返回的結果就為default-value,否則就返回本身的值。但是當col1字段的值為空字符串(”),由于空字符不是NULL,因此返回的結果還是空字符串。如果需要把空字符串或NULL值都用default-value代替,顯然ifnull是不行,不過使用case when語句能搞定,示例如下:

select c1,
(case when c2 = '' or c2 is null then 'default-value' else  c2 end) 
from test;
分類: MySQL, 數據庫 標簽:

PHP Warning: Call-time pass-by-reference has been deprecated

2013年1月17日 沒有評論

今天執行一個php腳本的時候得到如題的警告信息,原因是在調用function的時候在參數前面加了符號”&”,這種做法已經沒php遺棄了。參數前加符號”&”,就是相當于傳地址,function內部可以修改此變量。那么如何去掉此警告的同時且達到function內部能對參數進行修改呢?答案就是在定義function的時候使用”&”符號。例如:

function foo(&$var) {
	$var = 321;
}

$var = 123;
foo($var);

echo $var;   // 輸出為 321
分類: PHP 標簽:

vim 塊操作

2013年1月16日 沒有評論

以前寫shell腳本或修改某些配置文件(如:nginx)時,由于沒有塊注釋,只能一行一行的來加注釋,甚是麻煩。今天無意中發現了vim中的快操作,使用此功能能很方便的實現塊注釋。

在非insert模式使用組合鍵 ctrl + v 來開啟塊模式,這時在窗口左下角顯示“ — VISUAL BLOCK — ”,可以通過方向鍵或h、j、k、l來選擇需要操作的塊。可以對選擇的塊進行編輯、復制、粘貼、刪除等操作。

例如注釋nginx配置文件中的某一段,具體操作是:先把光標移動到需要注釋的開始行的最前面,使用 ctrl + v 開啟塊模式,使用j向下移動光標,可以看到被選取的塊,在使用 shift + i (即大寫的I)進入插入模式(注意此時插入點會自動回到開啟塊模式的位置),輸入注釋符#,ESC 退出插入模式,稍等片刻,剛才選取的塊自動被填充了#,就達到了快速注釋一段配置的目的。操作示例如下:

 

分類: Linux 標簽:

防止點空鏈接頁面回到頂部

2013年1月15日 沒有評論

由于現在AJAX的流行,頁面的上a標簽的功能可能不僅僅是作為一個鏈接跳轉,還可能是用作觸發一個ajax請求,即用上a標簽的onclick事件。a標簽是通過屬性href來指定鏈接地址的,如果用做ajax的button,可能會把href的屬性值設置為#,例如:

<a href="#" onclick="doAjax()">Btn</a>

這樣做其實是沒有錯的,但是當點擊此鏈接后,頁面會跑到頂端,特別的,當頁面設置了 時候,會跳出另外一個頁面,所以在用戶體驗上不是很好。

如何解決這樣的問題呢?其實很簡單,給href屬性賦值一個javascript空函數即可,例如:

<a href="javascript:void(0)" onclick="doAjax()">Btn</a>
分類: web前端 標簽:

vim 分屏操作

2013年1月14日 沒有評論

啟動vim打開多個文件并分屏顯示:

vim -on file1 file2
o為小寫字母,上下分,n是分屏的個數,后面是待打開的文件

vim -On file1 file2
O為大寫字母,左右分,n是分屏的個數,后面是待打開的文件

在已經打開的vim中對文件進行分屏

對光標所在的窗口進行上下分屏
:sp
ctrl + w s

對光標所在的窗口進行左右分屏
:vsp
ctrl + w v

不同窗口間的移動

移動到光標左邊的窗口
ctrl + w h
ctrl + w 

移動到光標上邊的窗口
ctrl + w k
ctrl + w ↑

移動到光標下邊的窗口
ctrl + w j
ctrl + w ↓

關閉當前窗口

ctrl + w c
ctrl + w q
:q
分類: Linux 標簽:

vim recording功能介紹

2013年1月13日 沒有評論

使用vim時無意間觸碰到q鍵,左下角出現“recording”這個標識,覺得好奇,遂在網上查了一下,然后這是vim的一個強大功能。他可以錄制一個宏(Macro),在開始記錄后,會記錄你所有的鍵盤輸入,包括在insert模式下的輸入、正常模式下使用的各種命令等。

具體使用:

第一步:在正常模式下(非insert模式、非visual模式)按下q鍵盤

第二步:選擇a-z或0-9中任意一個作為緩沖器的名字,準備開始錄制宏

第三步:正常的操作,此次所有的操作都會被記錄在上一步中定義的緩沖器中

第四步:在非insert模式下輸入q停止宏的錄制

第五步:使用@ + 第二步中定義的緩沖器的名字即可。

例如想把下面的文字

line1
line-2
line3-1
l4

變成如下的文字

System.out.println(line1);
System.out.println(line1);
System.out.println(line-2);
System.out.println(line3-1);
System.out.println(L4);

觀察可以發現他們的規律,在每行文字的開頭添加“System.out.println(”,結尾添加“);”就變成下面的信息了。下面簡單介紹一下如何使用recording來完成這樣的操作。
首先把光標移動line1上,輸入qt,準備開始錄制,緩沖器的名字為t,錄制的動作為:shift + ^ 回到行首、按下i鍵進入insert模式、輸入“System.out.println(”、按下esc鍵回到正常模式、shift + $ 回到行尾部、按下i鍵進入insert模式、輸入“);”按下esc鍵回到正常模式,按下q停止錄制。然后把光標移動到下面一行的任意位置輸入 @ + t 即可。

recording還可以和查詢結合起來使用,例如想把一個文件中含有特定字符串的行注釋,可以通過這樣的宏來實現。在正常模式下輸入/search string + enter、shift + ^、i、#、esc、shift + $。

讓定制的宏自動執行多次的方法是先輸入一個數字,然后在輸入@ + 緩沖器的名字。 例如 [email protected],表示執行100次。

分類: Linux 標簽:

linux 終端下的常用快捷鍵

2013年1月13日 沒有評論

使用linux的少不了玩命令行,掌握一下快捷鍵可以讓你做事達到事半功倍的效果。用的最多的應該是屬于Tab鍵,功能是自動補齊。主要用在命令本身名字和進入目錄查看文件,有了它就不需要一字一字的輸出命令的完整名字,只要輸入前面幾個字符,然后Tab一下就可以了,如果存在多個它會全部提示出來;進入一個很深的目錄時候,使用Tab也能快速進入。下面列舉一些我常用的組合快捷鍵。

  • ctrl + a ?回到命令行的行首
  • ctrl + e ?回到命令行的行尾
  • ctrl + c ?取消當前行輸入的命令,并重新到下一行
  • ctrl + r ?出現命令歷史記錄搜索提示,輸入字符后會自動匹配命令
  • ctrl + b ?向后退一個字符,相當于向左方向鍵
  • ctrl + f ?向前進一個字符,相當于向右方向鍵
  • alt ?+ b ?向后跳一個字
  • alt + ?f ?向前進一個字
  • ctrl + p ?向上翻以前的輸入命令,相當于向上方向鍵
  • ctrl + n ?向下翻以前的輸入命令,相當于向下方向鍵
  • ctrl + w ?從光標位置向后刪除一個字
  • ctrl + y ?粘貼最后一個刪除的字
  • ctrl + d ?刪除當前光標位置的一個字符
  • ctrl + u ?從光標當前位置刪除所有字符至行首
  • ctrl + k ?從光標當前位置刪除所有字符至行尾,相當于長按ctrl + d
分類: Linux 標簽:

linux nohup用途

2013年1月12日 沒有評論

玩過Linux的人應該都知道,如果想讓一個程序在后臺運行,只要在執行命令的末尾加上一個&符號就可以了。但是這種方式不是很保險,有些程序當你登出終端后它就會停止。那么如何讓一個程序真正永遠在后臺執行呢。答案就是使用 nohub 命令,格式為:

nohup 執行程序的命令 &

如果程序有輸出,它會試著把輸出寫入執行上述命令的當前文件夾下的 nohup.out 文件中,當寫入失敗,就會寫當前用戶的$HOME目錄下的nohup.out 中。

分類: Linux 標簽:

無覓相關文章插件,快速提升流量

30选5怎么中奖