2014

4

5

PHPで連想配列の中身をmb_convert_kana変換してやんよ!!!

Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

大規模サイトになると、最初はサイト内に静的に記述していた住所や電話番号やメールアドレスなど誤字脱字が致命的なキーワードをたくさんのページに記述して、いざそれらを変更しようとした場合に、よほどこまめにログを取っている人でもない限りはサイト内のファイルから特定キーワードを一括検索・一括置換を繰り返さなければならない・・・ これを解決してみよう!!!

特定文字列を連想配列にしてHTMLファイルに設置

まず共通特定キーワードを管理するphpファイル「keyword.php」を作成。 サイト内の言語・文字エンコードを設定し、例としてサイト名と電話番号とメールアドレスを特定キーワードとして持つために配列名$keywordにそれとわかる様なキー名を指定し、それぞれのキーワードを代入します。

「keyword.php」の記述

	mb_language("Japanese");
	mb_internal_encoding("UTF-8");

	$keyword = array();
	$keyword['Name'] = "ときどきWEB";              //サイト名
	$keyword['Tell'] = "0120-0721-4545";          //電話番号
	$keyword['Address'] = "tokidoki@yanyo.jp";    //メールアドレス
この「keyword.php」ファイルをHTMLファイルの「keyword.html」内で読み込み、「keyword.php」で指定した$keywordのキー値を出力させたい場所に各々配置させます

「keyword.html」の記述

<?php require_once($_SERVER['DOCUMENT_ROOT'].'/keyword.php'); ?>
<!DOCTYPE>

<!-- ~省略~ -->

<body>

このサイトは<?php echo $keyword['Name']; ?>です。<br>
電話番号は<?php echo $keyword['Name']; ?><br>
メール送信は<a href="mailto:<?php echo $keyword['Address']; ?>">コチラ</a>

※「keyword.php」の読み込みリクエストのパスはphpファイルを設置するディレクトリによって変わります

htmlファイルのブラウザソース出力結果

上記の2ファイルをサーバーにアップしてブラウザで確認すると配置したキー値が代入した特定キーワードが出力されています。

このサイトはときどきWEBです。<br>
電話番号は0120-0721-4545<br>
メール送信は<a href="mailto:tokidoki@yanyo.jp">コチラ</a>

このようにして特定キーワードを複数のHTMLファイル内に配置しておけば、キーワードを変更する際に「keyword.php」内の$keywordのキー値を変更すればキー値の読み込み指定をしたHTMLファイルを一括管理できます。

連想配列内の文字列を一括変換する関数を作成

配列に入っている文字列な以上は環境によっては文字化けしてしまうことは十分にあり得ますので、今は連想配列となっている$keywordのキー値のカナを全角英数字を全角にして出力する文字エンコードを"UTF-8"に変換して出力させる関数mb_convert_changeを作成します。

「keyword.php」の追加記述

$keyword = mb_convert_change($keyword, "KA", "UTF-8");    //解説①

function mb_convert_change($array, $option, $encoding){
	if (is_array($array)){        
		foreach($array as $i => $key){   //解説②     
			if(is_array($key)){      
				$array[$i] = mb_convert_change($array[$i], $option, $encoding);     //解説③
			}else{
				$array[$i] = mb_convert_kana($key, $option, $encoding);    //解説④
			}
		}
	}else{
		$array = mb_convert_kana($array, $option, $encoding);   //解説⑤
	};
	return $array;
};

PHP処理の解説

  • ①変換要素となる$keywordmb_convert_kana変換させるユーザー定義関数mb_convert_change()の第一引数に配列名(例題では$keyword), 第二引数には変換オプション("KA"), 第三引数には変換エンコーディング("UTF-8")を代入して処理開始。
  • ②if文でis_array関数を使って第一引数($array)が配列かどうか判定し、foreach関数で$arrayの値を$keyに代入
  • ③配列$array内の変数を関数mb_convert_change()処理
  • ④配列$array内のキー値をmb_convert_kana変換
  • ⑤第一引数($array)が配列でない要素(変数やただの文字列)の場合はそのままmb_convert_kana変換

mb_convert_kanaを用いた文字列変換パターン

基本的には配列(または変数)の中の文字列を変換させるだけの関数なので、様々なシチュエーションを想定して処理発動の指定の仕方を変えればいろんな条件での使用もできると思います。

①指定したディレクトリ内のみ変換処理する場合

特定のディレクトリ内でだけ処理を発動させたい場合は変数$changeに変換条件になるディレクトリパスを代入し、今現在のURLに$changeの指定したディレクトリパスが含まれていた場合、関数mb_convert_changeを発動させます。

PHPの記述

$change = "/yanyo/";	//変換したい指定ディレクトリパス

if(strstr($_SERVER['SCRIPT_NAME'], $change)){
	$keyword = mb_convert_change($keyword, "k", "UTF-8");
};

②携帯サイト作成時の半角カナ変換する場合

ガラケー用のサイトの場合に変換処理を行いたい場合は、全角カナ→半角カナに変換する「k」と全角英数字→半角英数字に変換 する「a」をオプションに指定して、文字コードを「SJIS」に指定します。

PHPの記述

$keyword = mb_convert_change($keyword , "ka", "SJIS");

③フォームの入力データの数字やアルファベットを半角に揃える場合

同様にフォームなどで入力されたデータ$_POSTにも代用できます。 変換オプションを半角カナ→全角カナにする「K」と、濁点付きの文字を一文字に変換する「V」と全角英数字→半角英数字に変換する「a」に指定し、文字コードを「UTF-8」に指定します。

PHPの記述

$_POST = mb_convert_change($_POST, "KVa", "UTF-8");
こういうのを再帰処理というんでしたっけ?便利ですよねー。
Pocket
LINEで送る
Facebook にシェア
reddit にシェア
LinkedIn にシェア

トップへ