PHP忽略大小寫的字串處理

2013年6月18日 尚無評論

在PHP5 之後,有提供了字串處理時忽略大小寫的函式,蠻不錯用的而且也很好記憶,在此列出常用的幾個函式介紹:

 

strstr($str ,$keyword)  對應的函式就是stristr 

該函式主要是找出$keyword之後的字串(可以將原本要用substr函式才能處理的事簡化)

值得一提,在PHP 5.3.0 之後 strstr函式,增加一個參數  strstr($str ,$keyword [,$before_boolean=false]),如設定為true,則效果反向可以找出$keyword之前的字串

請參考http://php.net/manual/zh/function.stristr.php

 

strpos($str, $keyword [,$offset=0]) 對應的函式就是stripos

主要是回傳$str之中$keyword首次出現的位置

如果是要找最後一次出現的位置可以改用 strrpos 當然對應的函式是strripos

請參考http://www.php.net/manual/zh/function.stripos.php

 

str_replace($searchKeyword , $replace  ,$str) 對應的函式就是str_ireplace

可以將$str之中,全部的$searchKeyword都會換成$replace 

請參考http://php.net/manual/zh/function.str-ireplace.php

 

strcmp($str1  ,$str2) 對應的函式,要注意就不是常用的加上i 而是strcasecmp

可以針對$str1,及$str2 進行字串大小比對,$str1>$str2會回傳正數, 小於會回傳負數,相等會回傳0

請參考http://www.php.net/manual/zh/function.strcmp.php

然而這函式還有其它類似作用的函式 ,都一樣有提供忽略大小寫,如下:

strncmp(可指定比較時使用的最大長度) 對應的是strncasecmp,請參考http://www.php.net/manual/zh/function.strncmp.php

strnatcmp (自然順序的比較)對應的是strnatcasecmp,請參考http://www.php.net/manual/zh/function.strnatcmp.php

 

如果是要在preg_ match 或是preg_ match_all 之中忽略大小寫進行比對呢?

只要在$pattern之中加上i即可,例如 原本preg_match("/HI (.*?) from/",$str,$martchs)  只要改成這樣即可

preg_match("/HI (.*?) from/i",$str,$martchs)

詳細使用請參考 http://www.php.net/manual/zh/function.preg-match.php

Categories: PHP, 程式開發 Tags:

程式中如何檢查PHP版本及函式是否有提供

2013年6月7日 尚無評論

最近在處理PHP,有用到一些PHP函式都有限定PHP某版本之後才支援或是某版本之後有些參數就作廢了

以前其實很好區分,多半只要注意PHP 3 4 5 這種大版本就好,但像PHP 5.3.0 之前及之後就有蠻多差別

所以如要判斷時,只要在程式中用phpversion()即可得到目前使用的PHP版本號
 

<?

 if(phpversion()>='5.3.0') echo "HI";

?>

詳請參考http://tw1.php.net/manual/en/function.phpversion.php

就是這麼簡單,那如果要判斷這函式是否有提供呢? 我們可以用function_exists即可判斷:

<?
if (function_exists('imap_open')) {
    echo "IMAP functions are available.<br />\n";
} else {
    echo "IMAP functions are not available.<br />\n";
}
?>

詳請參考http://php.net/manual/en/function.function-exists.php

 

如果我們要找某個PHP系統參數值呢? 我們可以用get_ini來查出來

詳請參考http://php.net/manual/en/function.ini-get.php

Categories: PHP, 程式開發 Tags:

好用的JSON.stringify(物件建立JSON字串)

2013年5月12日 尚無評論

在Client Server 架構,最麻煩的就是debug,單單server 可以用開發工具的debug mode來抓問題,而client只能借助一些瀏覽器的工具來抓問題而且也沒有debug mode,頂多只有console.log 可以用,多半都要用alert 來顯示相關資訊,而現在ajax 盛行,要抓問題時,不再只是顯示一個單值這麼容易,所以今天來介紹一下如何顯示json的值!

JSON.stringify是什麼呢?

在查資料的同時,才發現自己都是東摸一點,西學一點,沒有學習一個完整性,所以都要花上不少時間,或浪費不少時間,json格式已經瞭解並大量在使用了,但看到JSON.stringify才知,這麼好用的函式怎麼這麼晚才去瞭解呀!  在Firefox 3.1、Internet Explorer 8以上,已經都有支援,它可以將物件轉成JSON字串,所以在查詢時就很方便,以往當我們要將javascript 的物件查看其內容時,在alert 這物件只會顯示這是個[object],還要特別去指定一個屬性才會顯示該屬性質,要查詢時蠻不方便的,而透過JSON.stringify轉成JSON字串後,就可以很輕鬆查看

JSON.stringify怎麼用?

使用語法:

JSON.stringify(value [, replacer] [, space])
value:目標物件(陣列)
replacer:要比對顯示的對像物件(陣列)
space:要補的空白

如果你有個物件要顯示,最簡單的方式如下:

var obj= new Object();
obj.name="Tony";
obj.age=33;
obj.tel="0912332112";
obj.sex="M";

alert(JSON.stringify(obj));

這時你可以得到:

 

多棒呀!!,JSON完整的資訊全顯示出來了,不過還有更棒的,可以在後面加上空白

alert(JSON.stringify(obj,null,4));

顯示時排列的很整理,更方便閱讀了說!!

至於中間參數replacer的用法,就是可以進行過濾的動作,將符合replacer的顯示出來,相關用法我這邊就不多寫了,如有興趣,可以看這篇文章,寫的蠻不錯的~簡單易懂 : JSON.stringify 语法讲解 – 随风浪迹天涯 – 博客园

感想

以往再使用json都是透過ajax 傳遞,所以可以透過查看response就可以看到相關內容,這次單單用在client就覺得JSON.stringify特好用的,看來還是要多多把基本功打好才行呀~^^

Categories: AJAX, Java Script, WebDesign, 未分類 Tags:

關閉Android預設(原生)瀏覽器後session及cookie的保留注意事項

2013年4月23日 尚無評論

一個很簡單的session及cookie幾乎花上了我快一天的時間當然要特別寫下來紀念一下…^^||

有一定網頁開發經驗的人都應該知道,網頁使用session時,一般在關閉瀏覽器後再重啟,因為session ID不同所以就算失效了,但目前發現android預設的原生瀏覽器(採用webkit引擎)在關閉瀏覽器後再重啟,原session 還是存在,但在iphone上用safair就和電腦上的情況是一樣。

後來改用cookie設定max-age 的有效期(expire) 為session就是關閉瀏覽器後也會自己失效,沒想到也是一樣的情況,最後確認當手機重新啟動後再試同樣的流程,session及cookie(效期是session)的就會都失效了

以上測試的手機android版本為2.3.7 , 4.x ,有motorola的defy,samsung的S2,HTC z710e,SONY的xperia z都是一樣的結果。

所以結論是在android原生瀏覽器上,可能是為了方便還是覺得手機是個人化的用品,所以當離開瀏覽器後並不會讓sessoin scope的session & cookie失效,但其它瀏覽器,例如:dolphin(海豚),chrome,opera,Firefox等就都不會這樣…

最後,當然session等超過server可接受的時間(一般是預設30分鐘),還是會失效的,因為Server上已經沒有保留你的session ID,拿原本的session ID當然沒有用了;不過cooike就不會啦~因為原生瀏覽器會把你當做還是在當次使用的。 

似乎這樣的資訊,在網路上好像沒啥人寫,希望上述資訊可以讓有同樣困擾的人不要和我白白花費這麼多時間在測試~XD

Categories: WebDesign Tags: , ,

解決Error java.io.CharConversionException: Not an ISO 8859-1

2012年12月22日 尚無評論

最近的網誌都是在解決錯誤訊息,有點像擦屁股大隊長了

這次要排除的是 java.io.CharConversionException: Not an ISO 8859-1 這個問題

在servlet output stream,時發生的,會出現以下錯誤訊息

description The server encountered an internal error () that prevented it from fulfilling this request. exception java.io.CharConversionException: Not an ISO 8859-1 character: 中 javax.servlet.ServletOutputStream.print(ServletOutputStream.java:89) javax.servlet.ServletOutputStream.println(ServletOutputStream.java:242) mypack.HelloWorldExample1.doGet(HelloWorldExample1.java:43) javax.servlet.http.HttpServlet.service(HttpServlet.java:690) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:122) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196)

上網查了一下才知,原本寫法是直接使用output stream ,就像

ServletOutputStream out = res.getOutputStream();
res.println(line);

怎麼轉碼都不行(但在Tomcat 4時是OK的,Tomcat 6之後就都會出錯),但如果改用OutputStreamWriter ,先定義好寫出的編碼就可以正常了,使用方式如下:ServletOutputStream stream= res.getOutputStream();

OutputStreamWriter out = new OutputStreamWriter(stream,"UTF-8");
out.write(line);

但要注意,這個物件沒有println可用,所以如要斷行符號可要自己加上去喔!

參考資源: http://www.taixinglife.com/blog-138-89.html

Categories: JAVA, 程式開發 Tags:
分頁: 上一頁 1 2 3 ... 7 8 9 10 11 12 13 ... 86 87 88 下一頁