2013年8月27日火曜日

php 絵文字を判定する

絵文字をチェックしたい。絵文字を取り除きたい。
そんなことを思った。

いくつか方法があるみたいだけど、簡単かつ高速ということで
HTML_Emojiを使ってみる。
公式(?)サイトにあるのは古いのかiPhone5の絵文字には対応していないので
以下からダウンロード。

http://download.revulo.com/PHP/HTML_Emoji-20111114.zip

iPhoneでテストしていたのでこれに気づかずにしばらくはまった。
自分も適当にネット上から見つけてきたものなので、
このファイルの由来がわからんのがちょっと怖い。
誰か知ってたら教えて。

使い方

/*---------------------------------------------------------------------------*/

// HTML_Emoji
require_once 'HTML/Emoji.php';
$backup = error_reporting(0);
$emoji = HTML_Emoji::getInstance();
error_reporting($backup);

// docomoの絵文字
$text = "晴れ\xEE\x98\xBE";

// 絵文字が存在するか?
if( $emoji->hasEmoji( $text ) ) {
    // 絵文字を取り除くs
    $text = $emoji->removeEmoji( $text )
}

/*---------------------------------------------------------------------------*/

getInstanceを呼び出すときに、
PHP5で使うとE_STRICTレベルのエラーが発生する。
PHP5で推奨されない記法(PHP4由来のもの)などに対する警告らしい。
エラー文を抑制するために、

/*---------------------------------------------------------------------------*/

$backup = error_reporting(0);
$emoji = HTML_Emoji::getInstance();
error_reporting($backup);

/*---------------------------------------------------------------------------*/

で挟む。
あとは文字列を各メソッドに渡してやるだけ。
サンプルでいちいちhasEmojiで調べているのは自分の目的が
どちらかというとそっちにあったからで、
実際に使用するときにはいちいちチェックする必要はないです。

2013年8月23日金曜日

jQuery 画像をスライドさせる

バナー画像をスクロールさせよう。
そんな感じのをいろんなサイトで見かけるぞ。

ということで
そのいろんなサイトでバナーをスクロールさせているjQueryプラグイン bxSlider を使う。

使い方は簡単。
サイト(http://bxslider.com/)からファイルをダウンロードして、
使用しているサーバーの適切なディレクトリに配置。
使用したいページで呼び出す。

/*---------------------------------------------------------------------------*/

<script type="text/javascript" src="jquery.min.js"></script>
<script type="text/javascript" src="jquery.bxslider.min.js"></script>
<script type="text/javascript">
$(function() {
  $('.bxslider').bxSlider(
    auto:true,
    responsive:true,
    slideWidth:240 });
});
</script> <div id="title">bx_slider</div> <ul class="bxslider">
    <li><img src="/images/pic1.jpg" /></li>
    <li><img src="/images/pic1.jpg" /></li>
    <li><img src="/images/pic1.jpg" /></li>
</ul>

/*---------------------------------------------------------------------------*/

たったこれだけのコードでできちゃう!
便利便利。
オプションで色々設定もできるみたい。

今回は以下の二つのサイトを参考にしました。
http://wp-and.me/bxslider/
http://cotdeve.com/blog/jquery/jquery-%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%B7%E3%83%A7%E3%83%BC-bxslider/

ところでbxSliderのbxってなんなんだろう? まさかboxじゃないよね。

Objective-C cppファイルを使う

Windows上でVisual Studioを使って開発して、
最後の仕上げ(iphoneへのインストールとか)だけXCodeでできないかと四苦八苦中。

それっぽい資料を求めてさまよっていたときに、有用そうな情報を見つけたのでメモメモ。

情報元

/*---------------------------------------------------------------------------*/

・Objective-Cではcppファイルをそのまま使えるらしい。
・しかし、もとのObjective-Cのファイル(m,mmも?)で使用するとエラー。
・XCodeではファイルタイプによってコンパイル方法が変わっているとか。
・ファイルタイプを変更すると怒られなくなる!

/*---------------------------------------------------------------------------*/

まだ調べている段階なのでテストはしていない。

2013年8月20日火曜日

Smarty PHPの定数を使う

PHPではdefineを使うことで定数を定義できる。

define( "MY_DEFINE", "define_value" );

このPHPで定義した定数をさらにSmartyから使うことができる。

{$smarty.const.MY_DEFINE}

何気に便利なんじゃなかろうか。

CakePHP saveの罠

MySQL側でtinyintかつ長さを1に設定しているとCakePHPが勝手に論理値と判断する?

saveメソッドを呼び出すと0は0でいいんだけど、1以上の値はなにを渡しても必ず1になる。
だいぶ前に気づいていてMySQL側のtinyintを全部長さ3にしといたつもりだったんだけど
漏れがあってしばらく悩んだ。

2013年8月15日木曜日

SDL 日本語フォント

SDLではTTF(TrueTypeFont)を使用することができる。
これを使用して日本語フォントを表示する。
SDL_ttf.dllをプロジェクトと同じフォルダにおいてライブラリとリンクさせておこう。

具体的な使用法はこのサイトがわかりやすい。
http://utsukemononi.gozaru.jp/gc/sdl/page008.html

ただ、サイトにもあるように、読み込む時にSJISからの変換が必要になる。
MultiByteToWideCharとWideCharToMultiByteを使えば変換ができそうだ。

//-----------------------------------------------------------------------------

char* src = "日本語フォント"
char dst[64];

// UTF16のサイズを取得する
int size = ::MultiByteToWideChar( CP_ACP, 0, (LPCSTR)src, -1, NULL, 0 );

// ShiftJISからUTF-16へ変換
BYTE* buffer16 = new BYTE[ size * 2 + 2 ];
::MultiByteToWideChar( CP_ACP, 0, (LPCSTR)src, -1, (LPWSTR)buffer16, size );

// UTF8のサイズを取得する
size = ::WideCharToMultiByte( CP_UTF8, 0, (LPCWSTR)buffer16, -1, NULL, 0, NULL, NULL );

// utf8に変換する
::WideCharToMultiByte( CP_UTF8, 0, (LPCWSTR)buffer16, -1, (LPSTR)dst, size, NULL, NULL );

//-----------------------------------------------------------------------------

大体こんな感じで変換したバッファを渡したらちゃんと日本語で表示された。

2013年8月7日水曜日

php 16進数を扱う

phpで16進数の文字を取り扱うことになった。
変換するための関数があったぞう。

    // number   16進数データ
    // from     変換前の基数
    // to       変換後の基数
    base_convert( $number, $from, $to );

今回は16進数から10進数へ変換する

    $hex = "00000101";
    $dec = base_convert( $hex, 16, 10 );

decの中身が257。
おっけ。