2010年6月30日水曜日

docomoで「サイトが移動しました(301)」[携帯]

リンク先のURLの最後を「/」で終わらせないと「サイトが移動しました(301)」が出てしまう。
最初勝手にリダイレクトしてしまってるのかなって思ってプログラムを確認したのですが全然見付からず。。

http://planetarium-in-snowynight.blogspot.com?guid=ON
ではなく
http://planetarium-in-snowynight.blogspot.com/?guid=ON
にすると出なくなる。

strposとかで判定するといいかも。

2010年6月29日火曜日

携帯でmailtoをurlencodeする際の注意 [PHP][携帯]

携帯でmailtoを書くときは件名、本文をurlencodeしないと文字化けする場合があるけど、auでテストしてたら文字化けした・・・。
もしやと思って文字コードを変えてからやったら成功したのでメモっときます。

※cakephpの場合
if ($_Device->carrier == 'au' || $_Device->carrier == 'docomo') {
echo $html->link("送信する", "mailto:" . $_Config['regist_mail'] . "?subject=" . urlencode(mb_convert_encoding("新規会員登録", 'SJIS-win', 'UTF-8')) . "&body=" . urlencode(mb_convert_encoding("※件名と本文はこのままお送りください。", 'SJIS-win', 'UTF-8')));
} else {
echo $html->link("送信する", "mailto:" . $_Config['regist_mail'] . "?subject=" . urlencode("新規会員登録") . "&body=" . urlencode("※件名と本文はこのままお送りください。"));
}



2010/06/30 追記:
せっかくcakephpなのでhtmlhelperをextendsしてexhtmlhelperを作成しました。

class ExHtmlHelper extends HtmlHelper {
function mailto($title, $mail = "", $subject = null, $body = null, $carrier = 'docomo', $escapeTitle = true) {
if ($carrier) {
$carrier = strtolower($carrier);
}
if ($carrier == 'au' || $carrier == 'docomo') {
$subject = urlencode(mb_convert_encoding($subject, 'SJIS-win', 'UTF-8'));
$body = urlencode(mb_convert_encoding($body, 'SJIS-win', 'UTF-8'));
} else {
$subject = urlencode($subject);
$body = urlencode($body);
}
return $this->link($title, "mailto:" . $mail . "?subject=" . $subject . "&body=" . $body, null, null, $escapeTitle);
}
}