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($str01);

    
//■カタカナ→ひらがな
    
$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($str1false)."<br /><br />";

echo 
"文字列:{$str2}<br />";
echo 
"行番号:".GET_50on_row($str2)."<br />";
echo 
"行頭文字(デフォルト):".GET_50on_row($str2false)."<br />";
echo 
"行頭文字(「ん行」使用):".GET_50on_row($str2falsetrue)."<br /><br />";

echo 
"文字列:{$str3}<br />";
echo 
"行番号:".GET_50on_row($str3)."<br />";
echo 
"行頭文字(デフォルト):".GET_50on_row($str3false)."<br />";
echo 
"行頭文字(その他文字指定):".GET_50on_row($str3falsefalse"スカ");
?>
文字列:ネコマンマ
行番号:5
行頭文字:な

文字列:んーまんだむ
行番号:0
行頭文字(デフォルト):その他
行頭文字(「ん行」使用):ん

文字列:aたたたたた
行番号:0
行頭文字(デフォルト):その他
行頭文字(その他文字指定):スカ