function GetHatenaKeywordUrl($keyword) { $r = ''; for($j=0; $j<mb_strlen($keyword); $j++) { $x = mb_substr($keyword, $j, 1); if(strlen($x)==1) { $r .= $x; } else { $r .= strtolower(urlencode(mb_convert_encoding($x,'EUC-JP',mb_internal_encoding()))); } } return 'http://d.hatena.ne.jp/keyword/'.$r; }
ダサァ。関数の名前じゃなくて strlen() とか。
いろいろ試してると、preg_ で UTF-8 として処理するオプションをつけると [^\S] がいわゆる全角文字だけにマッチしたので試す。
function GetHatenaKeywordUrl3($keyword) { if(mb_internal_encoding()!='UTF-8') { $keyword = mb_convert_encoding($keyword,'UTF-8',mb_internal_encoding()); } $r = preg_replace_callback('/([^\S]+)/u', 'GetHatenaKeywordUrl3cb', $keyword); return 'http://d.hatena.ne.jp/keyword/'.$r; } function GetHatenaKeywordUrl3cb($a) { return strtolower(urlencode( mb_convert_encoding($a[0],'EUC-JP','UTF-8') )); }
処理時間が1/5になったけど微妙。