フォームの入力文字の型をチェック(エンコードで違いあり)

カタカナその他2バイト文字の正規表現はエンコードによって異なるので注意が必要。
正規表現の末尾の「u」があるので、UTF8の場合の例です。


// check
$error = 0;
// email
if(preg_match('/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD', $_SESSION['f5'])){
	
}else{
	$error = 1;
	$error_email = '<div class="red">メールアドレスが不正です。</div>';
}
if(!preg_match( "/[\@-\~]/" , $_SESSION[f6])) {
	$error = 1;
	$error_email = '<div class="red">パスワードが不正です。</div>';
}
// password
if($_SESSION[f6] != $_SESSION[f6a]){
	$error = 1;
	$error_pw = '<div class="red">パスワードが一致しません。</div>';
}

if($_SESSION[f6] == ''){
	$error = 1;
	$error_pw = '<div class="red">パスワードを入力してください。</div>';
}

// zip-code 半角数字以外を削除
if($_SESSION[f7] != ''){
	$_SESSION[f7] = preg_replace("/ー|−|―/", "-", $_SESSION[f7]);
	$_SESSION[f7] = preg_replace("/--/", "-", $_SESSION[f7]);
	$_SESSION[f7] = preg_replace('/[^0-9_-]/', '', $_SESSION[f7]);
	$_SESSION[f7] = preg_replace('/[^0-9a-zA-Z]/', '', $_SESSION[f7]);
}
// tel
if($_SESSION[f11] != ''){
	$_SESSION[f11] = preg_replace("/ー|−|―/", "-", $_SESSION[f11]);
	$_SESSION[f11] = preg_replace("/--/", "-", $_SESSION[f11]);
	$_SESSION[f11] = mb_convert_kana($_SESSION[f11], "a", "utf-8");
	$_SESSION[f11] = preg_replace('/[^0-9_-]/', '', $_SESSION[f11]);
}
// 名前カナ
$error_name_kana = '';
if($_SESSION[f3] != ''){
	if(!preg_match("/^[ァ-ヶー]+$/u",$_SESSION[f3])){
		$error = 1;
		$error_name_kana = '<div class="red">カタカナで入力してください。</div>';
	}
}
if($_SESSION[f4] != ''){
	if(!preg_match("/^[ァ-ヶー]+$/u",$_SESSION[f4])){
		$error = 1;
		$error_name_kana = '<div class="red">カタカナで入力してください。</div>';
	}
}
// shop_name
if($_SESSION[f13] != ''){
	if(!preg_match("/^[ァ-ヶー]+$/u",$_SESSION[f13])){
		$error = 1;
		$error_shopname_kana = '<div class="red">カタカナで入力してください。</div>';
	}
}

PHPで0サプレスする(数字の先頭から0を削除する)

《例》

$str = "000100";
echo $str;
//出力結果:000100

echo abs($str);
//出力結果:100

いろいろというか、もっと原始的なやり方を好むが、今回は便利な関数を使ってみた。
ベーシックな関数は必要だが、このような流行りもの的関数を使ってしまった自分が恥ずかしい。

ECCUBEの文字化け

サーバ移転や、試験環境などの構築で、文字化けが発生することがしばしばある。
データベース接続まわりを除いてみると、大切な記述が欠けている。

ファイル名: /data/class/SC_DbConn.php
65行付近

$this->conn = $objDbConn;
$this->conn->query("SET NAMES utf8");
$this->error_mail_to = DB_ERROR_MAIL_TO;
$this->error_mail_title = DB_ERROR_MAIL_SUBJECT;
$this->err_disp = $err_disp;
$this->dbFactory = SC_DB_DBFactory_Ex::getInstance();
$this->conn->query("SET NAMES utf8");

を追記すれば解決する。

※ この作業を行うタイミングが重要です。
インストールのどのタイミングで行うか、DB接続直後です。

注意
エンコード関連を変更した後は、キャッシュファイルのクリアを忘れるべからず。

解説
php.ini のエンコード関係は、あまり指定しないのがサーバー屋の流儀である。
その場合、データベースの読み書きは、サーバーのデフォルト・エンコードで行われる。

サーバーのエンコードは、
最近は、UTF-8が多くなってきたが、以前はEUCが主流だった。

DBのエンコードとPHPファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。