2014年10月22日水曜日

PHPmemo_day12

PHPの基本に関するメモ。参考にしているのはPHPによるWebアプリケーションスーパーサンプル第2版の第2章(フォーム)後半です。

  • SQLコマンドに入る文字列をエスケープするにはmysql_real_escape_string(MySQL)、pg_escape_string(PostgreSQL)などの関数を用いる。ただし、php.iniでmagic_quotes_gpcをOnにしている場合、一旦stripslashes関数で文字列のエスケープ処理を解除してからDB専用の関数でエスケープ処理を行うのが良い。
  • フォームから受け取った値を用いてSQLクエリを構成する場合、数値は数値に変換してから挿入する。つまりintval関数で数値に変換するか、sprintfを使って数値を受け取る場合は"%d"として受け取ることになる。
  • フォームから受け取ったデータをsystem関数、exec関数を用いてシェルに渡すことがある。そのまま渡すと意図しないコマンドを実行される可能性があるので、シェルのメタ文字をエスケープするにはescapeshellcmd関数を用いる。
  • 特殊文字をエスケープするにはhtmlspecialchars関数を用いる。ただし「'」をエスケープするには関数の引数にENT_QUOTESを指定する必要がある。また、「"」、「'」をエスケープしない場合はENT_QUOTESを引数に与えることになる。
  • htmlタグをフォームから受け取った内容から取り除くにはstrip_tags関数を用いる。悪意のあるコード対策で用いられる。
  • 一部のタグだけ置換したいという場合はstr_replaceで置き換える。置換前と置換後の文字列を配列で指定することで複数のタグを一括で置換することもできる。
  • リンクに漢字を含むものについてはurlencode関数でエンコードを行う。これにより%5Cのように%と16進数から構成される文字列に置き換えられる。これをもとに戻すにはurldecode関数を用いる。
  • textarea内で改行をしても、表示では改行が含まれないようになっている。改行して表示するためにはnl2br関数を用いる必要がある。
  • アクセスの種類を判別するにはif( $_SERVER["REQUEST_METHOD"] == "POST" ){ ... }などとする。
  • explode関数で区切り文字を指定して、1つの文字列を配列に分割・収納することができるようになる。
  • mktime関数は日付をタイムスタンプ形式に変換できる。この関数では3月32日を4月1日のように自動的に解釈するようになっている。
  • checkdate関数は指定した年月日がグレゴリオ暦と矛盾がないかを調べる関数である。
  • mb_detect_encoding関数は文字コードの検出に使われる。引数で文字コードの検出の優先順位をつけておくことになる。
  • 文字コードの変換はmb_convert_encoding関数を使う。
  • 「$$変数名」という表記法がある。
  • $a = "abc";
    $$a = "xyz";
    echo $abc; // xyzと表示される。
    

0 件のコメント:

コメントを投稿

フォロワー

ページビューの合計