PHP - 文字列
トリミング
ユーザ入力のバリデーションで、最後にスペースが入っているだけでいちいち「URLに使用できない文字が入っています」のようなエラー文を出さないよう事前にトリミングとか。
※ 以下の関数はPHP4・UTF-8だとうまく置換できません。対応は暇な時にやります・・・。
<?php
/**
* ■■■マルチバイト左トリミング■■■
*
* 全角スペースを含めて左トリミング
*
* @param mixed $item 対象文字列 or 格納配列
* @return mixed 変換後文字列 or 格納配列
*/
function STR_mb_ltrim($item)
{
if(is_array($item)){return array_map('STR_mb_ltrim', $item);}
return mb_ereg_replace("^[\s ]+", "", $item);
}
/**
* ■■■マルチバイト右トリミング■■■
*
* 全角スペースを含めて右トリミング
*
* @param mixed $item 対象文字列 or 格納配列
* @return mixed 変換後文字列 or 格納配列
*/
function STR_mb_rtrim($item)
{
if(is_array($item)){return array_map('STR_mb_rtrim', $item);}
return mb_ereg_replace("[\s ]+$", "", $item);
}
/**
* ■■■マルチバイトトリミング■■■
*
* 全角スペースを含めてトリミング
*
* @param mixed $item 対象文字列 or 格納配列
* @return mixed 変換後文字列 or 格納配列
*/
function STR_mb_trim($item)
{
if(is_array($item)){return array_map('STR_mb_trim', $item);}
return STR_mb_rtrim(STR_mb_ltrim($item));
}
?>
50音行取得
「あかさたな・・・」別にデータを分けたい場合に使用する関数。
<?php
/**
* ■■■50音行取得■■■
*
* 50音に濁音、半濁音、促音、捨て仮名(小文字)も加えている。
* @param string $str 対象文字列
* @param bool $result_type 取得形式(true:行番号 false:行頭文字)
* @param bool $n_flg 「ん行」使用フラグ(true:使用 false:"ん"は「その他」にする)
* @param mixed $other_str 「その他」時に返す文字(文字で返す場合。デフォルト:"その他")
* @return mixed 行番号(0~11(0は「その他」))or 行頭文字("あ"~"ん"・"その他")
*/
function GET_50on_row($str, $result_type=true, $n_flg=false, $other_str=false)
{
//■50音配列設定
$on50_array = array(
array("あ","い","う","え","お","ぁ","ぃ","ぅ","ぇ","ぉ"),
array("か","き","く","け","こ","が","ぎ","ぐ","げ","ご"),
array("さ","し","す","せ","そ","ざ","じ","ず","ぜ","ぞ"),
array("た","ち","つ","て","と","だ","ぢ","づ","で","ど","っ"),
array("な","に","ぬ","ね","の"),
array("は","ひ","ふ","へ","ほ","ば","び","ぶ","べ","ぼ","ぱ","ぴ","ぷ","ぺ","ぽ"),
array("ま","み","む","め","も"),
array("や","ゆ","よ","ゃ","ゅ","ょ"),
array("ら","り","る","れ","ろ"),
array("わ","ゐ","ゑ","を","ゎ")
);
// 「ん行」使用なら追加
if($n_flg){$on50_array[] = array("ん");}
//■対象文字列の1文字目取得
$first_str = mb_substr($str, 0, 1);
//■カタカナ→ひらがな
$first_str = mb_convert_kana($first_str, "KVc");
//■50音配列を検索
$row_num = false;
foreach($on50_array as $k => $row_array){
if(in_array($first_str, $row_array)){
$row_num = $k + 1; // 行番号("あ"は1)
break;
}
}
//■50音時
if($row_num !== false){return $result_type ? $row_num : $on50_array[$k][0];}
//■50音以外(その他)時
if($result_type){
// 行番号で返す場合
return 0;
}else{
// 行頭文字で返す場合
return ($other_str === false) ? "その他" : $other_str;
}
}
?>
GET_50on_row()の使用例。
<?php
$str1 = "ネコマンマ";
$str2 = "んーまんだむ";
$str3 = "aたたたたた";
echo "文字列:{$str1}<br />";
echo "行番号:".GET_50on_row($str1)."<br />";
echo "行頭文字:".GET_50on_row($str1, false)."<br /><br />";
echo "文字列:{$str2}<br />";
echo "行番号:".GET_50on_row($str2)."<br />";
echo "行頭文字(デフォルト):".GET_50on_row($str2, false)."<br />";
echo "行頭文字(「ん行」使用):".GET_50on_row($str2, false, true)."<br /><br />";
echo "文字列:{$str3}<br />";
echo "行番号:".GET_50on_row($str3)."<br />";
echo "行頭文字(デフォルト):".GET_50on_row($str3, false)."<br />";
echo "行頭文字(その他文字指定):".GET_50on_row($str3, false, false, "スカ");
?>
文字列:ネコマンマ
行番号:5
行頭文字:な
文字列:んーまんだむ
行番号:0
行頭文字(デフォルト):その他
行頭文字(「ん行」使用):ん
文字列:aたたたたた
行番号:0
行頭文字(デフォルト):その他
行頭文字(その他文字指定):スカ