發表文章

目前顯示的是有「程式」標籤的文章

用 HTML mailto 屬性指定標題與信件內容

這幾天在為一個活動網頁做按鈕。成本不高,沒有後台程式,而且是設計給行動裝置用的網頁。按鈕的目的是要能寄信,然後指定信件的標題與內容。沒有後台程式,幾乎就代表只能用 HTML 的 mailto 來達成目標。「mailto」指定收件者是沒有問題的,不過要指定信件標題和內容,因為從來沒試過,就來查查看。 查了一兩天的資料(並沒有很認真),先是發現可以用 <form> 跟 <input> 與 mailto 屬性來寄送郵件及內容。但是因為 <input> 傳送的格式是以「變數名稱=內容」這樣的方式,和要帶入活動文案的方式不符。後來發現 這個很棒的網頁 ,裡面有關於如何帶入標題與內容的解說。簡單說明如下。 其實和 HTML 接收變數的 GET 方式一樣,mailto 可以接收以「?」和「&」連接的參數(第一個變數用「?」接下來的變數都用「&」),格式為「mailto:abc@mail.com?變數1=變數1的值&變數2=變數2的值&變數3=變數3的值」。可指定的變數(看起來)包含某些郵件標頭(header)的屬性,所以像 cc、bcc、subject 都可以用,要帶入內容的話則可用 body。所以我想帶入標題和內容的話,語法就是: 「mailto:abc@mail.com?subject=我是標題&body=我是內容」 另外,在 RFC 文件中有指出 mailto 裡不允許 8 位元字元,原本以為要帶入中文字的話得想辦法用 Base64 編碼,不過測試之後發現 iPhone 和 Chrome 上面都可以正常帶入中文字。目前還不確定是不是所有環境都可以,總之就這樣囉。 <form> 和 <a> 因為剛開始搜尋到的是 <form> 的用法,所以在實作時我也是以 <form> 來實作,結果在 iPhone 上實際跑的時候發現內容沒有帶入,整個是空的。原本以為是 iPhone 的關係(電腦中的 Chrome 和 Firefox 都正常),後來查到 蘋果的說明文件 也是一樣的語法,證明應該有支援沒錯。查了一會後,我才後知後覺的發現,蘋果網頁中用的是連結而非表單。果然換用 <a> 之後 iPhone 就能正常帶入...

PCLZIP 壓縮中文檔名

最近幫人寫的一個網站需要壓縮 zip 檔,使用的是 pclzip 這個套件,只需要簡單幾個指令就能壓縮/解壓縮 zip 檔,是很不錯的方案。因為網站編碼是 UTF-8(這個時代誰還在用 Big5 的...),所以存下來的檔名很自然也是以 UTF-8 編碼。在處理的過程中發現,在壓縮帶中文檔名的檔案時,UTF-8 編碼的檔名/目錄名無法在 Windows 下正常解壓。不確定是 pclzip 或是 windows 方面的問題。總之解決方案就是,在壓縮的過程中把 UTF-8 轉成 Big5 編碼。 幸好 pclzip 有提供 變更檔案名稱的方法 (News,連結可能會變動)。在 User Guide 裡沒有寫出來,所以花了點時間才找到。我大約的寫法是像這樣: // 設定解壓後的中文目錄名稱 $big5DirName = iconv('UTF-8', 'Big5', '中文目錄名/'); // 將要下載的檔案轉換為 big5 foreach( $queue as $utf8filename ) {   if( file_exists($file_hosting_dir.$utf8filename) ) {   $zipFiles[] = array(     PCLZIP_ATT_FILE_NAME => $file_hosting_dir.$utf8filename,// 本地檔案路徑     PCLZIP_ATT_FILE_NEW_FULL_NAME => $big5DirName.iconv('UTF-8', 'Big5', $utf8filename) );// 壓縮檔內路徑+全名   } } // 如果沒資料就停止下載 if( !tep_not_null($zipFiles) ) {     echo '無可下載檔案。';     exit; } // 建立 pclzip 物件, 並壓縮所有檔案 $archive = new PclZip($zip_tmp_file_path_name); $v_list = ''; $v_list = $archive->create($downl...

Wordpress ImageCounter 黑點

最近在幫一個客戶架 WordPress 網站,對方要求要有計數器。找到一個很不錯的 plug-in: ImageCounter ,可以指定計數器底圖和字型等,在外觀上還蠻自由的。底圖只能用 GIF 檔,程式是以 PHP 將數字貼上。不過在套用的時候卻發現 GIF 在有透明背景的情況下會產生黑點,後來不用透明效果數字卻反而變透明,沒入背景圖中...。 這現象太詭異,還好程式蠻簡單的,乾脆看一下它的 php 碼。發現 ImageCounter() 函式中,有一行 imagefill($image,0,0,$bgcolor); 這裡的 $bgcolor 即沒宣告 Global 也沒有初始化,看起來是個孤兒... 所以我查了一下 imagefill 的用法,指定顏色給它 $bgcolor = imagecolorallocate($image, 255, 255, 255); 然後黑點就很神奇的不見了。不過,再深入查看 imagefill 的作用,和起來就只是從指定的點開始填入顏色,看不出來這裡的作用。於是把它拿掉看看,好像還是正常的。由於和 php 的圖形函式庫不熟,也沒空再深入研究,就處理好這裡,收工。