2011年6月9日 星期四

php的sprintf()使用方式

php中字串格式化函數sprintf()用法簡介:

語法:string sprintf(string format, mixed [args]...);
返回值:字串

[函數說明]

本函數用來將字串格式化。參數format是轉換的格式,以百分比符號%開始到轉換字元為止。而在轉換的格式間依序包括了:

1.填空字元:0的話表示空格填0;空格是內定值,表示空格就放著。
2.對齊方式:內定值為向右對齊,負號表向左對齊。
3.欄位寬度:為最小寬度。
4.精確度:指在小數點後的浮點數位數。

型態,轉換字元:

% 印出百分比符號,不轉換。
b 整數轉成二進位元。
c 整數轉成對應的 ASCII 字元。
d 整數轉成十進位元。
f 倍精確度數字轉成浮點數。
o 整數轉成八進位元。
s 整數轉成字串。
x 整數轉成小寫十六進位。
X 整數轉成大寫十六進位。

例子:

   1: <?php
   2:  
   3: $money1 = 68.25;
   4: $money2 = 54.35;
   5: $money = $money1 + $money2;
   6: // 此時變數 $money 值為 "123.1";
   7: $formatted = sprintf ("%01.2f", $money);
   8: // 此時變數 $ formatted 值為 "123.10"
   9:  
  10: ?>

這個%01.2f是什麼意思呢?

首先這個%符號是開始的意思,他寫在最前面表示指定格式要開始了。也就是「起始字元」,直到出現「轉換字元」為止,就算格式終止。然後跟在%符號後面的是0這個零是「填空字元」表示,如果位置空著就用0來填滿。

在0後面的是1這個1是規定小數點前面的數字占位元要有1位以上。

如果把1改成2如果$money的值為1.23,則$formatted的值將變為01.23。因為,在小數點前面的數字只占了1位元,按照上面所規定的格式,小數點前數字應該占2位元,現在只有1位,所以用0來填滿。

在%01後面的.2就很好理解了,它的意思是規定小數點後的數字必需占2位元。如果這時候,$money的值為1.234,則$formatted的值將為1.23。為什麼4不見了呢?因為按照上面的規定,在小數點後面必需且僅能占2位。可是$money的值中,小數點占了3位,所以4被去掉了,只剩下23。

最後,以f轉換字元結尾,其他轉換字元請自行參考上面的轉換字元清單。

[關於對齊]

如果在%起始符號後面加上-(負號),將會把數位以向右對齊的方式進行處理。

看下面實例:



   1: <?php
   2:  
   3: $money = 1.4;
   4: $formatted = sprintf ("%-02.2f", $money);
   5: echo $formatted;
   6:  
   7: ?>
這時候,$formatted將不會再是01.40 而是1.400。

2011年6月3日 星期五

回上一頁表單清空

http://yachi.idv.tw/blog/archives/2005/01/07/66

在[PHP]:
header(”Cache-Control: no-store, no-cache, must-revalidate”);
header(”Cache-Control: post-check=0, pre-check=0″, false);

在[ASP]:
meta http-equiv=”Pragma” content=”no-cache”
meta http-equiv=”Cache-Control” content=”no-cache”
meta http-equiv=”Expires” content=”0″

2011年5月31日 星期二

主機無法處理ogv的影片導致瀏覽器不能順利播放

「多用途網際網路郵件延伸標準(MIME)」型別,可指示網頁瀏覽器或郵件應用程式如何處理從伺服器收到的檔案。例如,當網頁瀏覽器要求伺服器上的項目時,也會要求物件的 MIME 類型。某些 MIME 類型,像是圖形,可以顯示在瀏覽器內。其他像文書處理文件,需要外部協助應用程式才能顯示。

原本的主機商上沒有設定處理ogv的檔案型別,所以下面的html怎麼試就是無法顯示....

   1: <video poster="movie.jpg" height="360" width="640" controls>
   2:     <source src="videos/1306282816.mp4" type="video/mp4" />
   3:     <source src="videos/1306282816.ogv" type="video/ogv" />
   4:     請使用支援HTML5的瀏覽器。
   5: </video>

原來問題就出在type="video/ogv"上,後來參考這裡之後,才發現主機上需要設定好MIME才能讓檔案被瀏覽器正確辨識,最後在主機上設定好下列的MIME Type後問題就解決了!


   1: ".ogg"     => "application/ogg",
   2: ".ogx"     => "application/ogg",
   3: ".ogv"     => "video/ogg",
   4: ".oga"     => "audio/ogg",

找出陣列最後一筆資料

第一個情況,要找出陣列中的最後一筆資料,用end()這個函數:

   1: <?php
   2:  
   3: $fruits = array('apple', 'banana', 'cranberry');
   4: echo end($fruits); // cranberry
   5:  
   6: ?>
第二個情況,當處理到陣列中最後一筆資料時:


   1: <?php
   2:  
   3: foreach($input as $key => $value) {
   4:     $ret .= "$value";
   5:     if (next($input)==true) $ret .= ",";
   6: }
   7:  
   8: ?>
或是:


   1: <?php
   2:  
   3: for ($i=0;$i<count(arr);$i++){
   4:     $i == count(arr)-1 ? true : false;
   5: }
   6:  
   7: ?>

2011年5月24日 星期二

表單中文內容寫入mySQL亂碼解決法

首先要設定網頁使用的語系是使用utf-8,接著再將資料表中儲存內容為中文的欄位設定校對為utf8_general_ci,這時可以發現網頁上可以正確顯示資料庫中的中文內容,不過當打開mySQL的資料表一看,會發現存入的中文資料都是亂碼,雖然抓出來後會正常顯示為中文,但檢視資料庫的資料時卻完全看不懂。解決的辦法是在mysql_connect後加上mysql_query("SET NAMES 'utf8'")的指令,告訴mysql這個connection之後的連線內容都要使用utf8,經過這個設定後,通常就可以解決大部份亂碼問題。

php的跳脫字元

\$ 顯示金錢符號 $
\" 顯示雙引號符號 "
\' 顯示單引號符號 '
\\ 顯示倒斜線符號 \
\b Backspace鍵
\n 換行符號

\r Return 歸位字元
\t Tab鍵
\000 ~ \377 以16進位表示某一個字元
\x00 ~ \xFF 以8進位表示某一個字元

可以用來格式化PHP產生的HTML文件!

php取得網址與目錄

  在PHP裡如果想要取得目前的網址資訊,不論是網域、目錄路徑或是參數,可以透過交叉使用下面的方法來達成目的。

$_SERVER['HTTP_HOST'] // 取得網域
$_SERVER['REQUEST_URI'] // 取得網域內的完整路徑及參數
$_SERVER['PHP_SELF'] // 取得網域內的完整路徑,但不含參數
$_SERVER['QUERY_STRING'] // 只取得參數

  以 http://www.lamron.tw/php_note/get_url.php?aa=1 這個網址為例,結果如下:

echo $_SERVER['HTTP_HOST']
// 得到 www.lamron.tw
echo $_SERVER['REQUEST_URI']
// 得到 /php_note/get_url.php?aa=1
echo $_SERVER['PHP_SELF']
// 得到 /php_note/get_url.php
echo $_SERVER['QUERY_STRING']
// 得到 aa=1

  也可以使用 __FILE__ 來取得伺服器上的路徑與目錄,加上使用 basename() 及 dirname() 就能夠篩選出需要的檔名或路徑。同樣以 http://www.lamron.tw/php_note/get_url.php?aa=1 這個網址為例:

echo __FILE__;
// 得到 /home/lamrontw/public_html/php_note/get_url.php
echo basename(__FILE__);
// 得到 get_url.php
echo basename(__FILE__, ".php");
// 得到 get_url
echo dirname(__FILE__);
// 得到 /home/lamrontw/public_html/php_note

echo dirname(dirname(__FILE__));
// 得到 /home/lamrontw/public_html/

以.htaccess修改虛擬主機中無法設定的php.ini

虛擬主機中無法修改php.ini的設定,可以透過在根目錄中建立.htaccess的方法來達到修改php.ini的目的。這裡舉例要修改php.ini預上傳檔案限制2M的設定:

1. 在根目錄中建立.htaccess檔案,如主機中已有該檔,則可以.htaccess file generator來進行線上修改或直接下載至電腦中修改。
2.在.htaccess檔案中加入php_value upload_max_filesize 10M,紅色部分為設定值。
3.存檔後上傳即可。

.htaccess
.htaccess是什麼?.htaccess是在Apache HTTP Server這款服務器架設軟件下的一個對於系統目錄進行各種權限規則設置的一個文件,存在於Linux操作系統中。比較常見的是定義默認首頁名稱,404頁面,301轉向,等等,還有更多的功能比如偽靜態,限製圖片外鏈,限制下載,密碼保護,去除頁面廣告等等,還有非常多的功能就不一一列舉。詳細內容參考這裡