スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

多階層配列中の文字列を一括エンコード変換

SJISなデータをパースしてarrayにしたものを内部でUTF-8として使うときのフィルタ
	private static function convertEncodingStr($str_tree, $to_encoding, $from_encoding='SJIS-win')
	{
		$ret = array();
		foreach($str_tree as $key=>$elem){
			if(is_array($elem)){
				$r = self::transformStrTreeEncoding($elem, $to_encoding, $from_encoding);
				$ret[$key] = $r;
			}else if(is_string($elem)){
				$r = mb_convert_encoding($elem, $to_encoding, $from_encoding);
				$ret[$key] = $r;
			}else{
				$ret[$key] = $elem;
			}
		}
		return $ret;
	}
スポンサーサイト

mb_convert_kanaの罠

PHPにはmb_convert_kanaという半角/全角を変換する関数が用意されています。
以下のようにして変換が可能です。
$hankaku = "abcABC";
$zenkaku = mb_convert_kana($hankaku, "R");//半角英字→全角英字
echo $zenkaku; // "abcABC"

しかしこの関数には罠があって " ' - \ といった記号は変換が行われません。
なので以下のように変換する必要があります。
function toZenkaku($src){
	$zenkaku = mb_convert_kana($src,'AS','UTF-8');
	$zenkaku = str_replace('-','-',$zenkaku);
	$zenkaku = str_replace("'","’",$zenkaku);
	$zenkaku = str_replace('"','”',$zenkaku);
	$zenkaku = str_replace("\\",'¥',$zenkaku);
	return $zenkaku;
}

PHPでbasename()を日本語ファイル名に使うとバグがある

前回に引き続きPHPのバグ第2弾。
PHPにはファイルパス文字列からファイル名を抽出してくれる
basename()という関数が用意されているのですが
Linuxサーバ上で動かすとファイル名の頭が日本語のときに
文字化けするというバグがあるのです。

参考 PHP、Linux環境でbasenameやpathinfoでの全角(日本語等)ファイル名の正しく取得が出来ない

こちらのバグはPHP6で修正される予定みたいです。
例によって原始的に解決するのが手っ取り早いようで

$filename = end(split('/', $filepath));

とすればとりあえず日本語ファイル名を抜くことができます。

PHPでfgetcsvを使うとバグがある

表題のとおりPHPのfgetcsv()にはPHP5からバグがあるのです

詳しくはこちら
PHP5でfgetcsvが正常に動作しない

現象としてはfgetcsvした要素の1文字目が文字化けするという形。
csvファイルを扱うときにこんなfgetcsvなんてそれっぽい関数があったら
“PHPまじ便利!”とか感動しそうというか自分も軽く感動した口ですが
その感動をものの見事に裏切ってくれるバグです。
とりあえず普通に正規表現で切るのがベターなようで
上記の記事でfgetcsvと同じように使える素晴らしいサンプルコードを
用意してくれているので困ったときはぜひこちらを活用させていただきましょう。

PHPで文字のインクリメントをしたいときの対処法

文字をインクリメント(A→B→C…)としたいとき、Cなんかだと'A'++で'B'になるんだけど
char型のないPHPでどうやるのかなと。
とりあえず文字をASCIIに変換する関数とその逆関数があったのでこれを使うことにしてみる。

$ascii = ord('A');
$ascii++;
$B = chr($ascii);

もっとスマートな方法があればぜひ知りたいけどとりあえずこれで。
プロフィール

maruware

twitter ID : maruware
WEBエンジニア

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。