2012年5月31日 星期四

jQuery placeholder

HTML 所支援的tag "placeholder" 在IE上並不支援,所以只好尋求jQuery的幫助,之前找了很多但是一直都不合用,所以今天又找了一下,終於找到了一個不錯用的。

jQuery Placeholder plugin Download

下載後,把他引入,然後這樣使用

$('input[placeholder] textarea[placeholder]').placeholder();

這樣就可以使用了

不過我自己都習慣每個元件就設定一次,像這樣:

$obejct.placeholder()

如果要在js中建立元件又要讓他支援placeholder的話,那就這樣做就可以了

2012年4月30日 星期一

[jQuery] ajax 要注意的事情

今天在修Issue的時候,有個issue是這樣的,ajax資料清除在重整後,資料依然存在,害我百思不得其解,最後在同事的點提下,發現jQuery ajax時會cache,如果有不需要cache時,記得要把cache關掉

※IE 比較會遇到這種狀況

$.ajax({
    cache: false
})

2012年4月22日 星期日

如何正確的unserialize()

今天在修Bug時,發現到一個問題,在PHP常常會用到 serialize() & unserialize() 這個函式,但是假如今天存進去的資料格式不正確,要如何驗證資料的正確性真且安全的反解出來,我今天就遇到了這個"Notice: unserialize(): Error at offset 0 of 63 bytes "的訊息,代表資料格式不正確,無法正確的反解資料,於是我去PHP官網找到了別人寫的一個function。

function safe_unserialize($serialized) {
    // unserialize will return false for object declared with small cap o
    // as well as if there is any ws between O and :
    if (is_string($serialized) && strpos($serialized, "\0") === false) {
        if (strpos($serialized, 'O:') === false) {
            // the easy case, nothing to worry about
            // let unserialize do the job
            return @unserialize($serialized);
        } else if (!preg_match('/(^|;|{|})O:[0-9]+:"/', $serialized)) {
            // in case we did have a string with O: in it,
            // but it was not a true serialized object
            return @unserialize($serialized);
        }
    }
    return false;
}

這樣應該就可以驗證假如存入資料不正確時,可以正確的回傳一個值,而不跑出error。

2012年4月17日 星期二

[PHP] 將Object轉成Array

由於最近都改用物件的方法在寫程式,所以大都也用物件的方法取得變數,但是有時候需要回傳為json的資料型態時,PHP必須使用json_encode的函式將array轉成json,這時候就必須將物件的所有資料轉成一個array,就找到了網路上有人這樣做。

function objectToArray($object)
{
    if(is_object($object))
        $array = get_object_vars($object);
    return $array;
}

不過需要注意的地方是:

  • 假如是在object內轉出array則不必注意變數型態(連private都會讀取)
  • 如果是在外部將object轉出array則必須將變數設為public才行,否則無法取得變數

例如:

  • 內部

    class Student{
        public      $name;
        protected   $height;
        private     $weight;
    
        function toArray()
        {
            if(is_object($this)
                 $array = get_object_vars($this);
            return $array;
        }
    }
    
    var_dump($student->toArray());
    // Array('name' => XX, 'height'=> 170, 'weight' => 48)
    
  • 外部

    class Student{
        public      $name;
        protected   $height;
        private     $weight;
    
    
    }
    function objectToArray()
    {
       if(is_object($this)
            $array = get_object_vars($this);
       return $array;
    }
    var_dump(objectToArray($student));
    // Array('name' => XX)
    

需注意其中的差異

2012年4月15日 星期日

[PHP] 取得使用者正確IP

        function getIp()
        {
                if(empty($_SERVER['HTTP_X_FORWARDED_FOR']))
                {
                        $proxyIp        = split(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
                        $UP             = $proxyIp[0];
                }
                else
                {                        $ip     = $_SERVER['REMOTE_ADDR'];
                }
                return $ip;
        }

2012年4月13日 星期五

[javascript] 使用正規表示法驗證URL

這兩天再寫案子的時候突然要用到regular expresion(正規表示法)驗證URL的正確性,所以就來記錄一下好了

function validateURL(url){
     var regUrl = /^(((ht|f){1}(tp:[/][/]){1})|((www.){1}))[-a-zA-Z0-9@:%_\+.~#?&//=]+$/;

     if(regUrl.test(url))
         return true;
     else
         return fale;
}

如果URL正確的話就會回傳TRUE值

2012年4月3日 星期二

[PHP] 如何用timestamp計算年紀?

$birthday = time();
$now      = time();
$age      = floor(($now - $birthday)/(60*60*24*365));