Posts Tagged ‘PHP’

[PHP] 為何Server收到HTTP Request時,參數的值多了反斜線( \ )!?

Thursday, March 25th, 2010

原因是PHP 裡面的 magic_quotes_gpc 選項被打開了。有關這個設定,可以參照這篇

如何瀘掉反斜線( \ )?
可以用下面這段code解決。做法是先判斷Server有沒有把magic_quotes_gpc這個選項打開。如果有的話,則將request裡每個key的value抓出來,執行stripslashes這個function瀘掉反斜線,再把改過的值填回request的key裡

	if (get_magic_quotes_gpc() == 1){
		foreach( $_REQUEST as $k => $v) {
		  $_REQUEST[$k] = stripslashes($v);
		}
	}

另外有關雙引號與單引號的差別,這裡也順便寫一下,也免忘記
雙引號

包含在雙引號裡頭的可以是一般文字字串,可以含有單引號。如果含有變數的話,會以該變數的值代入。也允許以「\」代表跳脫(escape)字元。

 \n:換行(newline)
 \r:送出 CR(carriage)
 \t:跳位(Tab)
 \\:反斜線(backslash)
 \$:錢字號(dollar sign)
 \”:雙引號(double-quote)
 \[0-7]{1,3}:八進位表示法的 regular expression
 \x[0-9A-Fa-f]{1,2}:十六進位表示法的 regular expression

單引號

 使用單引號要注意的是,在單引號中的變數不會以變數值代入。
 另外,可以被 escape 的字元只有兩個:\’ 與 \\。

PHP學習筆記 – Pre-defined Variables & Magic Constant

Sunday, June 14th, 2009

以下是PHP預先定義的變數:

  • $_SERVER伺服器變數
  • $_ENV環境變數
  • $_COOKIEHTTP Cookie
  • $_GETHTTP GET變數
  • $_POSTHTTP POST變數
  • $_FILESHTTP 文件上傳變數
  • $_REQUESTRequest 變數,由 $_GET,$_POST,$_COOKIE, 和 $_FILES 內容的全部組成的陣列。
  • $_SESSIONSession變數
  • $GLOBALSGlobal變數
  • $php_errormsg前一個錯誤消息

以下是PHP定義的Magic Constant:

  • __LINE__目前行數
  • __FILE__目前檔案路徑
  • __DIR__目前資料夾路徑,PHP 5.3才有支援
  • __FUNCTION__目前Function Name
  • __CLASS__目前Class Name
  • __METHOD__目前Class Method Name
  • __NAMESPACE__目前名稱空間,PHP 5.3才有支援

Example:

Tester::showMagicConstant();

class Tester {
  function showMagicConstant() {
    echo "__LINE__ = " . __LINE__ . "<br>"; // 目前行數
    echo "__FILE__ = " . __FILE__ . "<br>"; // 目前檔案路徑
    //echo "__DIR__ = " . __DIR__ . "<br>"; // 目前資料夾路徑,PHP 5.3才有支援
    echo "__FUNCTION__ = " . __FUNCTION__ . "<br>"; // 目前Function Name
    echo "__CLASS__ = " . __CLASS__ . "<br>"; // 目前Class Name
    echo "__METHOD__ = " . __METHOD__ . "<br>"; // 目前Class Method Name
    //echo "__NAMESPACE__ = " . __NAMESPACE__ . "<br>"; // 目前名稱空間,PHP 5.3才有支援
  }
}

執行結果:

__LINE__ = 19
__FILE__ = E:\PHPWorkspace\phptest\test\constant.php
__FUNCTION__ = showMagicConstant
__CLASS__ = Tester
__METHOD__ = Tester::showMagicConstant

PHP學習筆記 – 寄送Mail

Saturday, June 13th, 2009

MyMailer.php

其中用到Base64 Encode的方式,信件的寄件者和標題中文才不會變亂碼

<?php
class MyMailer {
  const headerFormat = '=?utf-8?b?%s?=';

  public static function mail($from, $to, $subject, $body) {
    // convert to base64 string
    $from = sprintf(self::headerFormat, base64_encode($from));
    $subject = sprintf(self::headerFormat, base64_encode($subject));

    // To send HTML mail, you can set the Content-type header.
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "Content-type: text/html; charset=utf-8\r\n";
    $headers .= "From: ". $from . "\r\n"; // 寄件者
    //$headers .= "Cc: xxxgmail.com\r\n"; // 副本
    //$headers .= "Bcc: yyy@gmail.com\r\n"; // 密件副本

    return mail($to, $subject, $body, $headers);
  }
}
?>

Example

";
$to = "Z先生 ";
$subject = "中文標題測試! 許功蓋...測試一下~~~ !@#$%^&*()_+=-0987654321|\:\";'{}[]<>?,./-*/+   123";
$body = <<< HTML_BODY





許功蓋...測試!!
!@#$%^&*()_+=-0987654321|\:";'{}[]<>?,./-*/+ 123 abcdeffghijklmnopqrstuvwxyz HTML_BODY; $result = MyMailer::mail($from, $to, $subject, $body); if( $result ) echo "寄送成功!"; else echo "寄發失敗!"; ?>

Gmail收到信顯示的結果