2010/5/31 月曜日

PHP:strtotimeで月を操作する際の注意点

Filed under: PHP — tiny-p @ 10:34:44

strtotime()で月を処理する場合の注意点

starftime で「-1または+1 month」などの足し引きを行う際、期待しない結果が出て来る可能性があります。
足し引きした結果の月の日数が30日以下、いわゆる西向く士(2,4,6,9,11)月の場合に発生します。

[失敗例]
< ?php
$timestamp = strtotime('2010-03-31 -1 month');
echo date('m', $timestamp).'月';
?>
結果:03月

[成功例]

< ?php
$timestamp = strtotime(' -1 month', date('Y-m-01', strtotime('2010-03-31')));
echo date('m', $timestamp) . '月';
?>
結果:02月

↓のように処理をしていると考えれば分かりやすい。
‘2006-03-31′ -1 month = ‘2006-02-31′
‘2006-02-31′ = ‘2006-03-03′

上記成功例では’Y-m-01′と1日を指定していますが、1日~28日であればなんでもよい。

2009/9/28 月曜日

PHPのURLエンコードについて

Filed under: PHP — tiny-p @ 10:00:37

・urlencode()
○半角チルダ(~)を%7Eに変換する
○半角スペースをプラス(+)に変換する
・rawurlencode()
○半角チルダ(~)の変換についてはPHPのバージョンによって違う
PHP 5.2.xまでは、%7Eに変換する
PHP 5.3.0からは、%7Eに変換しない(チルダのまま)
○半角スペースを%20に変換する

rawurlencode()はRFC1738に沿った変換とされているので、
基本的にはurlencode()よりrawurlencode()の方が無難。
ただし、RFC1738ではチルダを%7Eに変換しません。

RFC1738はその後、RFC3986によって更新されているが、
RFC3986はパッと見た感じではURLエンコードについては
(JavaScriptのencodeURIComponent()で使われるRFC2396の方ではなく、)
RFC1738を踏襲しているようだ。
Amazonの新しいAPIでも、RFC3986によるURLエンコードを使っている。

参考:

PHPの URLエンコード (urlencode, rawurlencode)半角スペース、チルダhttp://blogs.yahoo.co.jp/doityourselfa/21028824.html

URIに使ってよい文字の話 - RFC2396 と RFC3986 - Text::Easyhacking
http://d.hatena.ne.jp/keisukefukuda/20080321/p1

PHPの URLエンコード (urlencode, rawurlencode, http_build_query)
http://fdays.blogspot.com/2009/07/php-url-urlencode-rawurlencode.html

2008/6/3 火曜日

PHP:stripslashesやmagic_quotes_gpc off以外のエスケープ

Filed under: MySQL, PHP — tiny-p @ 11:04:46

参考:
http://www.syon.co.jp/syontech/tech021.html
http://www.syon.co.jp/syontech/tech003.html

文字コードにShift_jisを使用した場合、2バイト目が「5C」となる文字列をエスケープする場合に、「\」が「5C」で表わされる為に, mysql_real_escape_string()などでエスケープした場合に「能」や「表」といった漢字は「能\」や「表\」になる(5C問題)。対策として、他の文字コードを使う、一時的に変換してエスケープする、その為のエスケープ処理の関数を書く等が考えられる。

次のページ »

Copyright (C) 2007 tiny-p. All Rights Reserved.