2009年6月1日 星期一

php 和 asp 對等的語法

php和asp對象的等價關係

1)寫HTML
asp: Response.Write(str)
php: print $str;
echo $str;
print_r $debug_str;

2) Form, Cookie and QueryString變量
asp: 可以用Request object.
php: 這些變量是自動提供的作為一個全局變量,如果在PHP.ini文件中這樣配置的話:

variables_order="EGPCS"
register_globals=On

為了安全,我將不允許register_globals (設置它為OFF). 然後變量僅僅在數組中使用:
$HTTP_POST_VARS, $HTTP_COOKIE_VARS and $HTTP_GET_VARS.

3)Redirecting to another location
asp: Response.Redirect(url)
php: Header("Location: $url");

4) Cookie 處理
asp: Response.Cookies(cookiename) = newval
avar = Request.Cookies(cookiename)

php: setcookie($cookiename, $newval);
$avar = $HTTP_COOKIE_VARS[$cookiename];

5)Application變量
asp: Application(appvarname)
php: 不提供,可以用數據庫模擬

6)Session 變量
asp: Session(sessionname) = newval
avar = Session(sessionname)

php: 在PHP4或以後的版本中, 我們確定變量作為一個session在
session_register($sessionname), 然後,我們調用session_start( )
在開始使用的.php 頁恢復session變量值.

例如:

session_register("avar");
$avar = 99;
session_start();
print $avar;

7)Form 變量
asp: Request.Form("formvar")
Request.QueryString("getvar")

php: $HTTP_POST_VARS["formvar"];
$HTTP_GET_VARS["getvar"];

GET and POST 變量可以交替的自動地修改到PHP變量,這是不安全地方法。

8)Server 變量
asp: 這有許多服務器變量,可以看ASP文檔. 一個例子:

Request.ServerVariables("HTTP_HOST

php: 作為ISAPI模式, 服務器變量存儲在$HTTP_SERVER_VARS數組裡。
作為CGI, 它們存貯在環境變量裡, 用$HTTP_ENV_VARS數組或getenv( )
可以得到。一個例子:

$HTTP_SERVER_VARS["HTTP_HOST"] using ISAPI module

$HTTP_ENV_VARS["HTTP_HOST"] using CGI module

9)數據庫訪問
asp: 一般用ado技術
php: ADO可以使用adodb庫來模擬,這個庫等價與ado.
限制是,目前支持只讀性光標和前滾光標.
(註解)也可以直接調用com庫,看我的文章。

10)Buffering
asp: Response.Buffer = true
Response.Write("abc");
Response.Flush()
php: ob_start();
print "abc";
ob_end_flush();

11) Script Timeout
asp: 時間級是秒級:
Server.ScriptTimeout(240)

php: 時間級是秒級:
set_time_limit(240);

Regular Expression (RegExp) 正規表達式(正則表達式)

Tab的空白:\t

換行:\n

不分大小寫:(?i)(字串)

在 regular expression 中用括號括起來的部份視為一個群組,
而在 replacement 中可用 $ 加數字來帶入該群組對應的實際值,
所以最後才會有 "-$1-" , ( $1 代表第一個群組 )


更簡單的 寫法其實用 String.replaceAll() 就可以做到

1
2
String s = "123abc456AbC789";
String s2 = s.replaceAll("(?i)(abc)","-$1-");


(?i) 代表不分大小寫, 其他的就跟前述一樣囉


  1. ^
    寫在 pattern 第一個位置時,表示其後一符號必須出現在字串開頭的位置。寫在 pattern 中間位置時則為否定之意,表示字串中不可有 ^ 之後一符號的內容。
  2. $
    寫在 pattern 最後一個位置時,表示其前一符號必須出現在字串尾端的位置。寫在 pattern 中時無特別意義。
  3. *
    表示字串中有 0 到無數個其前一符號的內容。
  4. +
    表示字串中有 1 到無數個其前一符號的內容。
  5. ?
    表示字串中有 0 到 1個其前一符號的內容。
  6. { }
    表示前一符號在字串中的重覆次數。例如 /A{2}/ 表示 'A' 重覆兩次 (即 'AA') ;/A{2,}/ 表示字串含有 2 到無數多個 'A' ;/A{2,5}/ 表示含有 2 到 5 個 'A' 。
  7. .
    表示一個任意字元。
  8. [ ]
    表示字串含有括號中任一字元的內容。可以 - 表示一組連續字元,例如 /[a-z]/, /[0-9]/ 。注意, [] 僅代表一個字元,例如 /[abc]/ 表示 'a' 或 'b' 或 'c' ,而不是 'abc' 。
  9. ( )
    表示一個 sub pattern ,符合 sub pattern 的字串內容會被存放在匹配陣列中,並依序指派數字代表此 sub pattern 。可以此數字在 pattern 的其他地方引用內容,例如 /The h([0-9]) means Title (\1)/ 表示第 1 個 sub pattern 是 0 到 9 的任一字元,而 \1 表示匹配的內容。故 'The h1 means Title 1', 'The h2 means Title 2' 到 'The h9 means Title 9' 符合規則。
  10. \
    表示轉義 (escaping) ,將其後的字元視為一般字元。例如要表示字串中含有 '/' 字元時,就必須寫作 /\// 。
  11. |
    「或」意,字串中含有 '|' 之前一符號或後一符號的內容。例如 /image\.(jpg|png)/ 表示 'image.jpg' 或 'image.png' 。通常會用 () 括住 '|' 的前後符號。
  12. \d
    表示任何一個數字,意同 [0-9] 。
  13. \D
    表示任何一個非數字,意同 [^0-9] 。
  14. \w
    表示任何一個字元與數字以及 '_' ,意同 [a-zA-Z0-9_] 。
  15. \W
    表示任何一個 \w 以外的字元。
  16. \s
    表示任何一個空白符號,包括 \t, \v 等。
  17. \S
    表示任何一個非空白符號。


尋找最多字元的字及最少字元的字(Greedy and Lazy)
當RE下要搜尋一個範圍的重複時(如”.*”),它通常會尋找最多字元的符合字,也就是Greedy matching。舉例來說。

32. a.*b (開始為a結束為b的最多字元的符合字)
若有一字串是”aabab”,使用上述RE所得到的符合字串就是”aabab”,因為這是尋找最多字元的字。有時希望是符合最少字元的字也就是lazy matching。只要將重覆前述項目的表加上問號(?)就可以把它們全部變成lazy matching。因此”*?”代表的就是重覆任意次數,但是使用最少重覆的次數來符合。舉個例子來說:

33. a.*?b (開始為a結束為b的最少字元的符合字)
若有一字串是”aabab”,使用上述RE第一個所得到的符合字串就是”aab”再來是”ab”,因為這是尋找最少字元的字。

*? 重覆任意次數,最少重覆次數為原則
+? 重覆至少一次,最少重覆次數為原則
?? 重覆零次或一次,最少重覆次數為原則
{n,m}? 重覆至少n次,但不超過m次,最少重覆次數為原則
{n,}? 重覆至少n次,最少重覆次數為原則

一輩子受用的 Regular Expressions - 樣式比對 - 精華區 : 台灣PHP聯盟[ Taiwan PHP User Group ]

JavaScript replace new RegExp_一个人的精彩

石頭閒語:Regular Expression (RegExp) in JavaScript - 樂多日誌

Javascript Regex 的 字串比對(Match) 與 取代(Replace) | Tsung's Blog

JavaScript Kit- RegExp (regular expression) object

Regular Expression 在 replace 的應用

Regular Expression心得報告

Javascript 字串處理 (String Operations)

Javascript 字串處理 (String Operations)

  • 尋找字串(search)
    stringObject.search(searchstring)
    stringObject.search(尋找的字串)
    大小寫必須相符

    var str = "test String";
    alert(str.search("Str"));
    alert(str.search("str"));
    輸出結果:5
    輸出結果:-1



  • 傳回字串內相符的字串(match)
    無相符字串則傳回null,大小寫要相符

    var str = "test String";
    alert(str.match("TEST"));
    alert(str.match("Str"));
    輸出結果:null
    輸出結果:Str

  • 取得字串長度(length)
    var str = "test String";
    alert(str.length);
    輸出結果:11



  • 尋找某字串在字串內的位置(indexOf)
    stringObject.indexOf(searchvalue,fromindex)
    stringObject.indexOf (尋找的字串,開始尋找的位置)

    var str = "test String";
    alert(str.indexOf("Str"));
    alert(str.indexOf("Str",6));
    輸出結果:5
    輸出結果:-1



  • 從後往前找某字串在字串內的位置(lastIndexOf)
    stringObject.lastIndexOf(searchvalue,fromindex)
    stringObject.lastIndexOf (尋找的字串,開始尋找的位置)

    var str = "test String";
    alert(str.lastIndexOf("Str"));
    alert(str.lastIndexOf("Str",2));
    alert(str.lastIndexOf("Str",10));
    輸出結果:5
    輸出結果:-1
    輸出結果:5




  • 變更英文字大小寫
    toUpperCase() 大寫
    toLowerCase() 小寫

    var str = "test String";
    alert(str.toUpperCase());
    alert(str.toLowerCase());
    輸出結果:TEST STRING
    輸出結果:test string




  • 傳回字串內某位置的字元(charAt)
    stringObject.charAt(index)
    位置由0開始

    var str = "test String";
    alert(str.charAt(3));
    alert(str.charAt(7));
    輸出結果:t
    輸出結果:r


  • 傳回參數中以Unicode值所代表的字元組成的字串(fromCharCode)
    String.fromCharCode(numX,numX,...,numX)
    alert(String.fromCharCode(65,66,67));
    輸出結果:ABC




  • 傳回字串內某位置區間的字串(substring & substr)
    stringObject.substring(start,stop)
    stringObject.substring(開始位置,結束位置)
    stringObject.substr(start,length)
    stringObject.substr(開始位置,字串長度)
    (開始位置)若為負數則由後往前數,但不適用於IE

    alert("0123456789".substring(4,6))
    alert("0123456789".substr(4,6))
    輸出結果:45
    輸出結果:456789




  • 字串取代(replace)
    stringObject.replace(findstring,newstring)
    stringObject.replace(要找尋的字串,換成新的字串)
    大小寫必須相符

    var str = "test String";
    alert(str.replace("string", "Text"));
    alert(str.replace("String", "Text"));
    輸出結果:test String
    輸出結果:test Text




  • 組合字串(concat)
    stringObject.concat(stringA,stringB,...,stringX)
    stringObject.concat(字串A,字串B,...,字串X)

    var strA = "test ";
    var strB = "String";
    alert(str1.concat(str2));
    輸出結果:test String




  • 取得切割字串(slice)
    stringObject.slice(start,end)
    stringObject.slice(開始位置,結束位置)

    var str = "test String";
    alert(str.slice(5));
    alert(str.slice(0,4));
    輸出結果:String
    輸出結果:test



  • 分割字串(split)
    stringObject.split(separator, howmany)
    stringObject.split(分割字串, 分割後各字串的字元數)

    var str = "test String";
    alert(str.split(""));
    alert(str.split(" ",4));
    輸出結果:t,e,s,t, ,S,t,r,i,n,g
    輸出結果:test,String

php中高效能清除HTML 標記、空白字符

php中高效能清除html

在字符截取時常會因為HTML格式發生意外,ASP是,PHP也是,如果是可預見的簡單HTML格式用replace就行了,對於文章正文這一類裡面可能包含所有的HTML格式,想高效點還是用下面的的,已測試


$search = array ("']*?>.*?'si", // 去掉 javascript

"'<[/!]*?[^<>]*?>'si", // 去掉 HTML 標記

"'([rn])[s]+'", // 去掉空白字符

"'&(quot|#34);'i", // 替換 HTML 實體

"'&(amp|#38);'i",

"'&(lt|#60);'i",

"'&(gt|#62);'i",

"'&(nbsp|#160);'i",

"'&(iexcl|#161);'i",

"'&(cent|#162);'i",

"'&(pound|#163);'i",

"'&(copy|#169);'i",

"'&#(d+);'e"); // 作為 PHP 代碼運行

JavaScript 中的 "foreach" 語法

JavaScript 中的 "foreach" 語法

//變量聲明,方法一:假如 Object 未被擴展
var arrTest = new Object(); 

//變量聲明,方法二:假如 Object 已被擴展
var arrTest;

//賦值,以上兩種方法均可
array['something'] = 'yay';
array['somethingelse'] = 'more';

//循環
for ( var key in arrTest ) {
alert(arrTest[key]);
}