PHP

【覚書】PHPでフォームから入力された文字列の先頭・末尾の全角半角スペースを取り除く方法

最近フロントエンドの記事が多かったため、サーバー側のプログラム処理について書きます。

フォームから入力されたテキストをプログラムの処理に渡す前に、不要なスペースを取り除いておかないと、ユーザーが意図した動きをしないことがあります。

「 コネクト」「コネクト  」「 コネクト WEB 」

のように入力された場合です。いたずら目的で入力されたり、どこかのサイトから部分的にコピペしたような場合でしょうか?

入力された文字列をそのまま表示したり、登録するような場合はいいのですが、例えば、入力された文字列で、DBの検索をかけたり、APIにクエリとして投げるような場合には、先頭・末尾のスペースは取り除いてテキストの部分のみ渡します。

必要な処理

  • 先頭と末尾のスペースを削除する
  • 全角・半角のスペースどちらとも削除する
  • 複数のテキストの間のスペースは削除しない
$query = $_POST['data'];

で入力値を$queryにセットしておきます。
※$_POSTの部分は、$_GETや$_REQUESTの場合もアリ。
※ここで、htmlspecialcharsなどで、XSS対策をしておく方がいいです。

先頭・末尾の半角スペースの削除はtrim関数で

$query = trim($query);

これで、半角のスペースの対応はOKです。

先頭・末尾の全角スペースは正規表現を使って置換

以下、文字コードがUTF-8を前提とした処理です。

preg_replace()のマッチングのための正規表現で、「 (全角スペース)」を指定する方法。

$query = preg_replace('/^[\s ]*(.*?)[\s ]*$/u', '\1', $query);

あるいは、マルチバイト関数のmb_preg_replace()のマッチングのための正規表現で、「 (全角スペース)」を指定する方法。

mb_regex_encoding('UTF-8');
$query = mb_ereg_replace('^[\s ]*(.*?)[\s ]*$', '\1', $query);

いずれかの方法で全角スペースも取り除くことができます。

【覚書】テキストリンクを使ってパラメーター付きのフォームデータをPOSTする

デザイン上の問題で、画像やボタンでのフォームデータのsubmitができないという場面に直面しました。
submit先のスクリプトが外部のもので、POSTしか受け付けてくれない仕様のため、フォーム側で対応しないといけなかったんです。

不格好ではありますが、何とか対応できましたのでその方法をメモとして残しておきます。

form内でaタグでsubmitのJavascript直書きでリンクさせ、hiddenでパラメーターを
送信できます。

<form action="send_post_data.cgi" method="post" name="myform">
<a href="javascript:document.myform.submit()">
送信先でフォームの内容は処理できるよ
</a>
<input type="hidden" name="param1" value="aaa" />
</form>

【覚書】PHP、日付・時刻処理のメモ

WEBの申込フォームのプログラミングで、
2ヶ月後には、自動的にリストには表示されないようにして欲しいとか、
有効期限は、2週間とか、有効な開始日は、今日から3日後からとかいった場合、
開始日、終了日の自動取得が必要です。

PHPでの日付のフォーマット化、日付の取得、ときどき使うのだけれど、覚えられないので、メモとして残しておきます。

日付の処理は、mktime/strtotime/dateを使う。

□今日の日付
$d = date(“Y-m-d”,mktime());

□今日から○○日後
ex.今日から2日後
$d = date(“Y-m-d”,strtotime(“+2 day”,mktime()));

□今日から○○ヶ月後
ex.今日から2ヶ月後
$d = date(“Y-m-d”,strtotime(“+2 month”,mktime()));

□今日から○○ヶ月と○○日後
ex.今日から2ヶ月と2日後
$d = date(“Y-m-d”,strtotime(“+2 day”,strtotime(“+2 month”,mktime())));

□xx年xx月xx日から○○日後
ex.2012年1月1日から2日後
$st = “2012-01-01”;
$d = date(“Y-m-d”,strtotime(“+2 day”,strtotime($st)));

□xx年xx月xx日から○○ヶ月後
ex.2012年1月1日から2ヶ月後
$st = “2012-01-01”;
$d = date(“Y-m-d”,strtotime(“+2 month”,strtotime($st)));

□xx年xx月xx日から○○ヶ月と○○日後
ex.2012年1月1日から2ヶ月と2日後
$st = “2012-01-01”;
$d = date(“Y-m-d”,strtotime(“+2 day”,strtotime(“+2 month”,strtotime($st))));

strtotimeで、日付をタイムスタンプ型に変更して、日数、月数をプラスするのがキモ。