Posts tagged utf-8
Google Maps API を UTF-8 以外で使用する
3GoogleMap を使用するときに HTML の文字コードを UTF-8 以外にすると GoolgeMap の JavaScript を読み込んだときに IE などでエラーになる。その回避方法と読み込むときに文字コード(charset=”utf-8″)を指定すればOK。
<script src="http://maps.google.com/maps?file=api&v=2&key=GOOGEL_MAP_API_KEY" type="text/javascript" charset="utf-8"></script>
参考 URL:utf-8以外の文字コードで、Google Maps APIを使う (OPQR.jp : WebサービスとWebデザインについて考えてみる;)
[iPhone] XML を NSXMLParser を使用して解析する
1iPhone では NSXMLDocument がシュミレータでは動作するが実機では動作しないそうなので、NSXMLParser を使用して解析してみました。
解析したのは下記のような XML です。
<?xml version="1.0" encoding="UTF-8"?> <users> <user name="hoge" age="20" /> <user name="fuga" age="30" /> </users>
PHP で「全角ひらがな」や「全角カタカナ」かチェックする
3フォームのフリガナなどで全てひらがなのみ、またはカタカナのみかをチェックする方法です。
mb_ereg で判定する場合
mb_regex_encoding("UTF-8"); if (!mb_ereg("^[ぁ-ん]+$", $string)) { echo "ひらがなのみ"; } if (!mb_ereg("^[ァ-ヶー]+$", $string)) { echo "カタカナのみ"; }
JpGraph を日本語化する
1JpGraph を日本語化するメモです。
JpGraph をダウンロードする
JpGraph – PHP Graph Creating Library より最新版をダウンロードする。PHP4 で使用する場合は Ver 1.x 、PHP5 で使用する場合は Ver 2.x を使用すること
ダウンロードしたファイル内の src を jpgraph とリネームして PHP からインクルードできるところへ配置する。
(続きを読む…)
CSV ファイルをダウンロードさせるとファイルの先頭に BOM が勝手に付いてしまう
1開発しているシステムで CSV ファイルをダウンロードさせる機能があります。PHP コードは UTF-8 で記述しているのですが、CSV ファイルは Shift-JIS で出力したいので、ダウンロードさせるときに変換をしています。
その機能で急にファイルの先頭に勝手に BOM が付いてしまうというバグが発生しました。
しかも自分のローカルの開発環境では発生せずに、テスト機だけで起こるという現象でした。
ダウンロードする処理は何も修正していないので、最初は出力するデータに問題があるのかと思い、色々試したみたが出力するデータには関係ないことが分かった。
(続きを読む…)
CakePHP1.2 文字コードを EUC-JP に設定する
1現在開発しているシステムが文字コードを EUC-JP で制作しなければいけないのですが、今まで CakePHP は UTF-8 でしか制作したことがなく、設定方法などメモしておきます。開発に使用しているのは CakePHP1.2 です。
データベースの文字コード
app/config/database.php
var $default = array( 'driver' => 'mysql', 'persistent' => false, 'host' => 'localhost', 'port' => '', 'login' => 'user', 'password' => 'password', 'database' => 'database_name', 'schema' => '', 'prefix' => '', 'encoding' => 'ujis' );
EUC のときは encoding に ujis と設定します。
ちなみに
Shift-JIS のときは sjis
UTF-8 のときは utf8
とします。
これは MySQL の SET NAMES でそのまま使用されるためです。
システムの文字コード
CakePHP1.2 では下記のように設定します。
app/config/core.php
Configure::write('App.encoding', 'euc-jp');
CakePHP 1.1 の方法はちょっとコードを調べたのですが、 core.php などにも特に設定するところがなく分かりませんでした。分かる方いらっしゃったら教えてください。
CakePHP 携帯専用サイトを作成する
6CakePHP で携帯用のページを作成する際に CakePHP 携帯用ビューを表示する | Shin x blog のページが大変参考になります。
しかし、/m/ のような URL ではなく携帯専用サイトにしたかったので下記のような方法で実装しました。なお、PC でアクセスしたときには /pc.html という静的なページを表示するようにしてあります。
また、PC、携帯の振り分けはユーザエージェントで行っています。
携帯用コンポーネント
app/controller/component/mobile.php を作成し、PEAR の Net_UserAgent_Mobile を使用しています。このコンポーネントでユーザエージェントを判定して PC だったら pc.html へリダイレクトします。
PEAR の Net_UserAgent_Mobile はサーバにインストールしてもいいのですが、今回は app/vendors/ ディレクトリに入れました。また、app/vendors/ に include_path を通すために、CakePHPガイドブック を参考に include_path_vendors.php を作成しました。
app/controller/component/mobile.php
vendor("include_path_vendors"); vendor("Net/UserAgent/Mobile"); class MobileComponent extends Object { function startup(&$controller) { $this->controller = $controller; $mobile = &Net_UserAgent_Mobile::factory(); if ($mobile->isNonMobile()) { $this->controller->redirect("/pc.html"); } } }
今回は簡単に PC か携帯でアクセス振り分けているだけですが、画面の大きさやキャリアなどによって色々な処理の振り分けが考えられます。
携帯用ヘルパー
app/views/helper/mobile.php を作成して HTML 出力時に文字コードを Shift-JIS へ変換します。ヘルパーの afterRender メソッドを使用しています。
class MobileHelper extends Helper { function afterRender() { $out = ob_get_clean(); $out = mb_convert_kana($out, "rak", "UTF-8"); $out = mb_convert_encoding($out, "SJIS", "UTF-8"); ob_start(); echo $out; } }
コントローラで携帯用コンポーネント、ヘルパーを使用する
app/app_controller.php で携帯用コンポーネントと携帯用ヘルパーを使用します。
var $components = array('Mobile'); var $helpers = array('Mobile');
app_controller.php で設定しておけば全てのコントローラで共通に読み込むので各コントローラにその都度書く必要がなくなります。DB の管理画面など PC 用のコントローラが必要な場合は各コントローラに書いた方がいいでしょう。今回は完全に携帯用にしています。PC 用の管理画面もあるのですが、サブドメインを変えて app ディレクトリも違うものを使用しています。
また、各コントローラ内で設定するタイトルの文字コードを変換しないといけないので、app_controller.php の beforeRenderメソッドでタイトルの文字コードを変換します。
function beforeRender() { $this->pageTitle = mb_convert_encoding($this->pageTitle, "SJIS", "UTF-8"); parent::beforeRender(); }
以上で携帯専用のサイトが CakePHP で作成できました。
コントローラの afterFilter で文字コードを変換する方法
コントローラの afterFilter で文字コードを変換することもできます。
app/controller.php
function afterFilter() { parent::afterFilter(); $out = ob_get_clean(); $out = mb_convert_kana($out, "rak", "UTF-8"); $out = mb_convert_encoding($out, "SJIS", "UTF-8"); ob_start(); echo $out; }
この場合は、beforeRender でのタイトルの文字コード変換の処理が必要ないのと、携帯用ヘルパーは必要ありません。
PC 用のコントローラも作りたいときは携帯用コンポーネント、携帯用ヘルパーを使用する方法がよいかと思います。
CakePHP Textヘルパーの truncate を全角文字に対応させてみた
5CakePHP の Text ヘルパーに truncate という指定された文字列を任意の長さに省略するメソッドがあります。
しかし、このメソッドは全角文字を考慮していないため全角文字に用いると文字化けすることがあります。
そこでこのメソッドを全角文字に対応させてみました。
function truncate($text, $length, $ending = '…', $exact = true) { if (strlen($text) < = $length) { return $text; } else { mb_internal_encoding("UTF-8"); if (mb_strlen($text) > $length) { $length -= mb_strlen($ending); if (!$exact) { $text = preg_replace('/\s+?(\S+)?$/', '', mb_substr($text, 0, $length+1)); } return mb_substr($text, 0, $length).$ending; } else { return $text; } } }
直接 Text ヘルパーを修正するとバージョンアップなどのときに困るので、
cake/libs/view/helpers/text.php を app/views/helpers/mb_text.php にコピーしクラス名を
class MbTextHelper extends Helper{
として、truncate メソッドを上記のように修正しました。
使用するときはコントローラ内で、
var $helpers = array("MbText");
view で
echo $mbText->truncate("あいうえおかきくけこ", 5, "…", true);
とすると
あいうえ…
と表示されます。
ソフトバンク端末から mailto で件名と本文を入れる
1携帯サイトを作成していて mailto リンクで件名と本文を指定するのに下記のように指定します。
<a href="mailto:メールアドレス?subject=件名&body=本文">
※件名と本文は URL エンコードする必要があります。
しかしソフトバンクの3GC 端末で件名と本文の日本語がメーラに渡せないという現象がありました。
そこで、日本語を UTF-8 に変換してから URL エンコードすると渡せるようになりました。
HTML ソース自体は Shift-JIS です。
ソフトバンクの開発資料を見直したのですが、そういう記述は見つけられませんでした。
どこかに書かれているのでしょうか?
それとももっとうまいやり方があるのかなぁ。