loading
Please wait while loading...

查看詳情 讓 IE 用戶下載 docx, xlsx

Office 自 07 或以後版本提供了新的副檔名, 就是在原有副檔名加上了一個「x」, 例如 doc 變成了 docx, 如果你需要在伺服器提供 docx, xlsx, pptx 等檔案的下載, 在 firefox 或 chrome 等瀏覽器是沒有問題的, 可是如果用 IE 下載, 便會發現檔案變成了一個 zip 檔, 無法正確下載文件, 這是因為 IE 並不認得這種「新型」的檔案, 要解決這個問題, 便需要在 server 端寫一些額外的語法了

header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
header('Content-Disposition: attachment; filename="'.$filename.'"');
readfile($path);

查看詳情 一個在 IE 支援 placeholder 比較好的方法

HTML5 的 placeholder 屬性相信大家都熟悉不過, 但我們常常會很懊惱究竟該不該用他, 事關此屬性直至 IE9 都還未被支援 (相信新出爐的 IE10 應該可以用了吧!! ), 這就意味著所有使用 IE 瀏覽器的用戶都將看不到該提示, 不禁讓我們卻步。

網上有不少人都提供解決方案讓 IE 也能顯示該提示, 而最為常用的方法便是利用 jQuery 將所有 input 的值設定為 placeholder 的內容, 可是這個方法的缺點是提交表單時如果輸入框沒有輸入內容, placeholder 的提示便會被當成內容送出, 這又使得我們不得不多做一重功夫去驗証收到的內容是用戶輸入的內容還是 placeholder 的內容
因此我便在想了一個比較好的方法, 利用 position absolute 的屬性在輸入框上浮著一個提示文字, 當 focus 時便隱藏該提示, 這樣便可做到和 placeholder 一樣的效果又不用設定內容到 input 中了 ...........

查看詳情 用一張雜訊圖片制作不同顏色不同透明度的雜訊背景

在制作網頁時, 我們很常會使用雜訊的效果去制作背景圖片, 而常用的方法都是直接弄一張圖片去做這個效果。可是當我們的網站有多個位置要使用到有雜訊的圖片, 而且需要不同的顏色及透明度, 那豈不要弄很多張不同的圖片? 以下便介紹大家一個方法, 只需使用一張透明的雜訊圖片, 便可制作無限個不同顏色不同透明度的雜訊背景

首先, 最基本的是建立一個不透明的雜訊背景, 這是很簡單的事, 一個背景顏色加一張雜訊圖片便可以了, 除IE6或以下的瀏覽器, 其他瀏覽器應該也沒有問題的了, CSS代碼如下

background: url(noise.png) #F00

這樣便建立了一個有雜訊的紅色背景, 如果你需要透明度, 可使用 rgba 去設定背景顏色:

background: url(noise.png) rgba(255,0,0,0.5)

這樣便將原來的紅色雜訊背景變成 50% 透明的背景了
可是IE8或以下的瀏覽器並不支援 rgba 的設定, 所以我們又要做一些手腳了:

filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#AAFF0000', endColorstr='#AAFF0000');

加了以上的 filter 代碼後, IE 便可看到透明的背景, 上面 FF0000 是顏色代碼, 而 AA 則是十六進制的透明度, FF 代表不透明, 00 代表全透明
可是你可能發現怎麼透明是透明了, 但雜訊好像不見了, 沒錯, 因為 rgba 和 filter 共存時, IE 便吃不了背景圖片了, 所以這時我們要使用 CSS Hack 去令他們互相配合, 整套代碼如下

background: url(noise.png) rgba(255,0,0,0.5); // for modern browser
background: url(noise.png) transparent \\\\9;// for IE8 or below
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#77FF0000', endColorstr='#77FF0000');

以下是一個例子:

 

查看詳情 MySQL檢查時間或日期重疊

以下是4種會產生重疉的情況
(ns, ne, es, ee) = (new_start, new_end, existing_start, existing_end):
  1. ns - ne - es - ee: doesn't overlap and doesn't match (because ne < es)
  2. ns - es - ne - ee: ovarlaps and matches
  3. es - ns - ee - ne: ovarlaps and matches
  4. es - ee - ns - ne: doesn't overlap and doesn't match (because ns > ee)
  5. es - ns - ne - ee: ovarlaps and matches
  6. ns - es - ee - ne: ovarlaps and matches

SQL 語法 以下搜尋的版本

SQL Statment
Below method is found from internet while the second method is my own way usally use.
SELECT * FROM tbl WHERE
existing_start BETWEEN '$newStart' AND '$newEnd' OR
existing_end BETWEEN '$newStart' AND '$newEnd' OR
'$newStart' BETWEEN existing_star AND existing_end

以下是的個人慣常的做法, 兩者皆可找出重疊的紀錄

SELECT * FROM tbl WHERE
( existing_start<='$newStart' AND existing_end>'$newStart' )
AND ( existing_start<'$newEnd' AND existing_start>'$newStart' )

查看詳情 解決 fgetcsv 中文亂碼的問題

今天用 fgetcsv 進行文件匯入時, 發現某些文字是出現亂碼, 而如果將文件內容直接輸出是沒有此問題的, 原因明顯不過就是 fgetcsv 出的問題了, 在網上搜尋解決方案, 找到了以下的 function, 是有人重寫 fgetcsv 制作出來的, 我就直接把它改了名字, 不跟原本的 fgetcsv 重覆了, 使用此 function 果然解決了亂碼問題
function ffgetcsv(&$handle, $length = null, $d = ",", $e = '"') {
    $d = preg_quote($d);
    $e = preg_quote($e);
    $_line = "";
    $eof=false;
    while ($eof != true) {
        $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
        $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
        if ($itemcnt % 2 == 0)
            $eof = true;
    }
   $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));

    $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
    preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
    $_csv_data = $_csv_matches[1];

    for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
        $_csv_data[$_csv_i] = preg_replace("/^" . $e . "(.*)" . $e . "$/s", "$1", $_csv_data[$_csv_i]);
        $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
    }
    return empty ($_line) ? false : $_csv_data;
}
1 2 3 4 5 6 7 8