DoCoMoのXHTML

Posted by muchag | HTML,ガラケー | 2010-05-31 (月) 14:08:20

相変わらず面倒くさいDoCoMo。

DoCoMoでXHTMLを正しく使うには

  1. <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
  2. ではなく
  3. <meta http-equiv="ContentType" content="application/xhtml+xml; charset=Shift_JIS" />

という風にmetaタグを書き換えてやらなければならない。

また、XHTMLを利用する場合は
拡張子を .xhtml にする必要がある。

もし、拡張子を変更できないなら
.htaccessで

  1. AddType application/xhtml+xml .html

と宣言してやる必要があるそうだ。

そして、.php で通すなら

  1. header("Content-type: application/xhtml+xml");

こうしてやることでXHTMLが利用できる。

参考元
iモードHTMLとiモードXHTMLを正しく切り替える方法
ドコモ端末でCSSを利用するには

HTML,ガラケー | 2010-05-31 (月) 14:08:20 |

MobilePictogramConverter(絵文字の3キャリア自動変換)

Posted by muchag | Library & PlugIn & AddIn,PHP,ガラケー | 2010-05-30 (日) 0:33:47

やっとこさサイトが形になってきたけど
絵文字が DoCoMo だけしか出ない。
DoCoMo の番号を平打ちしたので当然だけど。

そこで調べてみると、以下が大好評♪
MobilePictogramConverter

でも、リンク切れ・・・orz
おっと配布代行サイトめっけ!
PHP Labo 絵文字の表示について

デフォルトでは、当該ファイルの1つ上のディレクトリに
MobilePictogramConverter フォルダを置く、という設定らしい。

でも、自分でパスを通してやれば任意の場所でOKということなので
それでいいや。

雛形

  1. /********* 絵文字変換の設定 *****************************************/
  2.  
  3. //絵文字の変換(true ... 変換する / false ... 変換しない)
  4. define('PICTOGRAM_MODE', false);
  5.  
  6. //プログラムファイル名
  7. define('PICTOGRAM_MAIN_FILE', '../MobilePictogramConverter/MobilePictogramConverter.php');
  8.  
  9. //画像格納ディレクトリ
  10. define('PICTOGRAM_IMAGE_DIR', 'http://www.example.com/MobilePictogramConverter/img/');

使い方は

  1. require_once 'MobilePictogramConverter.php';
  2.  
  3. $str = pack('H*', 'F89F'); // DoCoMo 絵文字 (太陽のマーク)
  4. $mpc =& MobilePictogramConverter::factory($str, MPC_FROM_FOMA, MPC_FROM_CHARSET_SJIS);
  5. echo $mpc->autoConvert();

こんな感じで、後は使いやすいように改変。

引用元:MobilePictogramConverterの使い方について

絵文字一覧

ちなみに、3キャリアの絵文字比較表は
2009-05-20更新
メール・ウェブ変換表(docomo ⇒ 他キャリア)
2006-11-22更新 DoCoMoコード表あり
ELIXIR 絵文字変換対応表

DoCoMo
iモード対応絵文字

Library & PlugIn & AddIn,PHP,ガラケー | 2010-05-30 (日) 0:33:47 |

携帯サイトからメール送信

Posted by muchag | PHP,ガラケー | 2010-05-29 (土) 13:14:55

携帯サイトで PHP からメールを送信すると文字化けするそうで
文字列にあれこれ手を加えなければいけない。

ひとまず覚書を。

  1. //メールエンコーディング
  2. mb_language("ja");
  3. mb_internal_encoding("ISO-2022-JP");
  4.  
  5. //本文エンコード
  6. $mail = base64_encode($mail);
  7. $mail = mb_convert_encoding($mail,"ISO-2022-JP","EUC-JP");
  8.  
  9. //subjectエンコード
  10. $subject = mb_convert_encoding($subject, "ISO-2022-JP","EUC-JP");
  11. $subject = mb_encode_mimeheader($subject,"ISO-2022-JP");
  12.  
  13. //ヘッダエンコード
  14. $header .= "Content-Type: text/plain;charset=ISO-2022-JP¥n";
  15. $header .= "Content-Transfer-Encoding: 7bit¥n";
  16. $header .= "MIME-Version: 1.0¥n";
  17. $header .= "X-Mailer:PHP/" . phpversion() . "¥n";
  18. $header .= "From:" . $admin . "¥n";
  19. $header .= "To:" . $email . "¥n";
  20.  
  21. //メール送信
  22. mail($email,$subject,$mail,$header);

説明)

mb_language(“ja”);で日本語であることを宣言。
mb_convert_encoding();は、内部文字エンコーディングを設定あるいは取得する。

文字コードをISO-2022-JPにするとmac、windows製両方で本文・タイトルが閲覧可能になる。
base64_encode();は本文・タイトルがメールでも読めるように文字を変換する。
mb_encode_mimeheader();は、MIMEヘッダの文字列をエンコードする。

メール送信するプログラムはmail();を使おう。mb_send_mailは自動的に変換されるため、設定のエンコードプログラムが無効になる。

引用元:php-メールのタイトル・本文の文字化け解決

PHP,ガラケー | 2010-05-29 (土) 13:14:55 |

携帯サイトの文字コード

Posted by muchag | PHP,ガラケー | 2010-05-29 (土) 2:12:33

参考元:第3回 携帯サイトの文字コードに気をつける

PHP,ガラケー | 2010-05-29 (土) 2:12:33 |

PDO -> 序章

Posted by muchag | PHP | 2010-05-28 (金) 23:43:34

これまでネイティブ関数の mysql で DB 操作をしてきたのだが
そろそろ何か使ってみようと思い立った。

PEAR::DB が第1候補だったのだが
残念ながら動作が相当鈍いらしい。

PDO

そこで以前挑戦して果てた PDO を思い出したわけだが
あれこれ見ていると、実はもっといっぱいあって
mysqli、MDB、MDB2、adoなんとか・・・まぁ 色々あるらしい・・・。

でもまぁ、ZF が使っているらしいし
一般的らしい PDO にすることにした。
PHP5.2 より標準装備らしい。

さくらインターネット

ところが、PDO を検索するうちに
さくらでは PDO が使えないとか。
ええええええ!

あれ?! 私は使える・・・。
ん??? 使える。
あれれ?
そういえば、はるか昔にトライしたから
それが残っているのかしら・・・。

ま、使えるんだからいっか♪

文字化け対策

更に大きな問題ががが。
前に 文字化け対策 で書いた
SET NAMES utf8
これを使わないと、どうしても文字化けする><
あれこれググっても、PDO の方法は1つ しかなく、
そのやり方でも文字化けした。
何せさくらでは PDO の my.cnf はいじれない。

ん~、でもまぁ せっかくだから
どうせ小さいサイトだし、ということで
mb_convert_encoding を毎回使うことでひとまず対応してみる。

さて、1から勉強しないといけないのだ。
 

2010-07-08 追記

mb_convert_encoding だと「波ダッシュ問題」が残る。

ん~ どうしても SET NAMES utf8 を使わないとだめなのかなぁ。
 

2015-02-07 追記

PDO では、PHP 5.3.6 から、DSN で文字コードを指定できるようになったとのこと。
 
php:PDO_MYSQL DSN

  1. <?php
  2. $dsn = 'mysql:host=localhost;dbname=testdb';
  3. $username = 'username';
  4. $password = 'password';
  5. $options = array(
  6.     PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
  7. );
  8.  
  9. $dbh = new PDO($dsn, $username, $password, $options);
  10. ?>

 
こんな書き方も!

  1. <?php
  2. $pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8", 'my_user', 'my_pass');
  3. ?>

php:文字セット

こちらの方が、スマートだね~♪
こちらの書き方で、PHP 5.4.7 環境にて、文字化けが直ることを確認。

PHP | 2010-05-28 (金) 23:43:34 |

mailto

Posted by muchag | HTML,ガラケー | 2010-05-27 (木) 18:10:06

各サイト内でよく見かける
「このサイトをお友達に紹介する」
を使いたい。

その際は基本的に以下の通り

  1. <a href="mailto:hoge@example.jp?subject=hoge&body=hoge%0D%0Ahoge%0D%0A">

※「%0D%0A」は改行コード(CL&LF)

その際の注意点を少々。

携帯サイトの場合
「CC」「BCC」

機種によって使えたり使えなかったり。

文字コード

現時点ではメールの文字コードは
「ISO-2022-JP」にするとよいっぽい。

この文字コード変換を
URLエンコード(URLエスケープ)というらしい。

HTML,ガラケー | 2010-05-27 (木) 18:10:06 |

携帯3キャリアを1ソースで!

Posted by muchag | HTML,PHP,ガラケー | 2010-05-27 (木) 13:28:54

携帯サイトはキャリア個別仕様が多くて
無駄な作業が増える一方ですなぁ。

それでも我慢して作らなきゃならない。
長いものには・・・巻かれちゃう!

ちゅうわけで覚書を。

1.DOCTYPE

3キャリアは、それぞれDOCTYPEが異なるようなので
その部分は外部ファイルに頼る。

  1. function doctype($carrier) {
  2.  
  3.     print("< ?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
  4.    
  5.     if($carrier == "DoCoMo") {
  6.    
  7.         print ("< !DOCTYPE html PUBLIC \"-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/2.3)1.0//EN\" \"i-xhtml_4ja_10.dtd\">\n");
  8.    
  9.     }
  10.     elseif($carrier == "SoftBank") {
  11.    
  12.         print ("< !DOCTYPE html PUBLIC \"-//J-PHONE//DTD XHTML Basic 1.0 Plus//EN\" \"xhtml-basic10-plus.dtd\">\n");
  13.    
  14.     }
  15.     elseif($carrier == "EZweb") {
  16.    
  17.         print ("< !DOCTYPE html PUBLIC \"-//OPENWAVE//DTD XHTML 1.0//EN\" \"http://www.openwave.com/DTD/xhtml-basic.dtd\">\n");
  18.  
  19.     }
  20.     else {
  21.    
  22.         print
  23.         ("< !DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\">\n");
  24.    
  25.     } // if($carrier == "DoCoMo") {
  26.  
  27. }

こんな感じで。

ちなみに各キャリアの公式情報は
DoCoMo:iモード対応XHTMLのバージョン
au:記述のルール
Softbank:技術資料
PDFファイル P.25

2.その他注意点

参考元
モバゲーのような携帯サイトを作るための12のTips
ZFではじめる携帯サイト

HTML,PHP,ガラケー | 2010-05-27 (木) 13:28:54 |

PEAR -> Net_UserAgent_Mobile

Posted by muchag | PHP | 2010-05-26 (水) 19:54:04

またまた がい~~~ん ときました。
つまらないことに時間を取られ・・・orz

include_path

Net_UserAgent_Mobile だけでなく
他のPEARもそうなのかもしれないけど
コード内の相対パスが
PEAR フォルダからスタートしているので
php.ini 内の include_path には
必ず PEAR フォルダを設定しなくてはならない。

他のことも考慮して
1つ上のフォルダにしていたので
じぇーんじぇーん動かず・・・
中身のパスを全部書き換えるのかと思ったよ・・・

メソッド一覧

それはそうと、Net_UserAgent_Mobile の
メソッド一覧を載せているサイトがあったので
参考URLアップ!
こういうのは本当に分かりやすくて
助かるでございます♪

参考元:Net_UserAgent_Mobile 携帯判別PEARパッケージの使い方と注意点

PHP | 2010-05-26 (水) 19:54:04 |

require と include の違い

Posted by muchag | PHP | 2010-05-26 (水) 18:31:35

requireinclude の違いは
外部ファイル内でエラーを起こしたり
外部ファイルが存在しなかった時の
動作が異なる。

require

上記エラーが発生すると
その時点で処理が止まり、

include

エラーが発生しても
外部ファイルの部分だけすっ飛ばして
その後の処理を続ける。
 
 
どちらも
_once
付きの関数が存在するが
これが付いていることにより
ファイルの再読み込みをしないため
こちらの方がお勧めらしい。

PHP | 2010-05-26 (水) 18:31:35 |

include_path

Posted by muchag | PHP | 2010-05-26 (水) 16:48:04

PEAR の設定等で利用する include_path
php.ini に書き込むわけだが。

include_path には、require()、include()、 fopen()、file()、 readfile() および file_get_contents() 関数がファイルを探すディレクトリのリストを指定

そかぁ。関数の場合に使えるのか。
ちょっと勘違い。

書式

「.」(ピリオド)
カレントディレクトリ

「:」(コロン)
UNIXサーバの場合のパス区切り記号(複数設定する場合用)

「;」(セミコロン)
Windowsサーバの場合(含XAMPP)のパス区切り記号(複数設定する場合用)

「/」(スラッシュ)
UNIXサーバの場合のディレクトリ区切り記号

「\」(バックスラッシュ)
\」(半角円マーク)
(フォントによってどちらかになる)
Windowsサーバの場合のディレクトリ区切り記号
 


[UNIXサーバの例]
include_path = “.:/usr/local/lib/php/pear:/usr/local/example”;

[Windowサーバの例]
include_path = “.;\usr\local\lib\php\pear;\usr\local\example”;

PHP | 2010-05-26 (水) 16:48:04 |
次ページへ »