月別アーカイブ: 2010年9月

require_onceを使うときの文字化けを防ぐ

携帯サイトを作っていて、require_once使用時に文字化けしてとらぶったのでメモ。

携帯用のサイトは文字コードをshift-jisで作る必要がある。

shift-jisで作ったページに別ファイルをrequire_onceで呼び出す場合、呼び出すファイルの文字コードがUTF-8だと文字化けしてしまう。

最初は呼び出す前の時点で、ファイルの中ですでにechoで出力していたんだけど、これだと文字化けが治せなかった。

呼び出すファイルの文字コードをUTF-8のまま使うには、require_onceで呼び出した後にechoで出力すると解決。

まず、呼び出すファイル内で出力したいものを変数$rに入れておく

そして呼び出すときに、文字コードを変換してあげる

わかってしまえば簡単なんだけど、結構悩んでしまった。

正規表現

正規表現をちょこちょこ使うようになった。
以前は手でやっていたことも大抵は自動でできることがわかってきた。手で時間をかけて何かやると、何か物事が進んでいるような気にはなるけど、思い込みでそう思うだけで、まったく相関関係はないので気をつけようと思った。

あと正規表現って奥が深そう。
いろんなことができそうなだけに、何かやろうとすると凄く時間がかかる。
Perlの勉強用に買った本、Perl言語プログラムレッスン(結城浩著)に、正規表現の練習用として、ヒトゲノムのY染色体の全ゲノムデータのことが載っていた。小説などの文章も、ゲノム情報も、単純な物の組み合わせで情報を表してるから、そう考えると面白いなぁと思う。

正規表現をある程度使えるようになったら、プログラム関係の勉強は一段落させてもっとアウトプットを増やしていく予定。

データベースの中身を書き換える

自分でデータベースを作り、そこからデータを取り出す。

取り出したデータを処理する

処理したデータを同じテーブルの別カラムに入れる(修正する)。

これ最初手こずったけど、一度やると簡単。

取り敢えず以下のように書いて動いたのでメモ

//データベースからデータを取り出す
//クエリ生成
$query=”SELECT * FROM data”;
//実行
$result = mysql_query($query);

//引き出したデータを処理
while ($row = @mysql_fetch_assoc($result)){
$num = $row[‘num’];
$name = $row[‘name’];

ここで好みの処理をする

$ant=”取り出したデータを処理した結果をここへ入れる”;
///UPDATE機能を使いデータ修正(データベースのnumにはauto_incrementでユニーク値を入れておく。WHEREで希望のデータのみ一個ずつデータの修正ができる)
$query1=”UPDATE data SET kakoudata=\””.$ant.”\” WHERE num=”.$num;
mysql_query($query1);

//データ書き換えのループ処理完了
}

一番引っかかったのが、どうでもよい部分で、データを入れるときの処理方法。数字は成功したけど、文字が何度やっても上手くいかないので30分くらい悩む。
結局よく見ると、変数に直接文字が入っていたから、クエリ生成するときに、=の後に直接文字が入ってエラーになってた。エスケープしてやると成功。クエリをプリントしてミスに気づいた。

これでデータベース関連で必要なことは一通りできるようになった。一回仕組みを作って単純化しメモしておけば、次使うときは5分で使えるので楽。こういうのを積み重ねていくと何気に差がつくんじゃないかと思う。

データベースのメモ

位置情報(世界系)をどういう形でデータに入れたらいいかわからなかった。
位置情報として扱える新しい専用のデータ形式(ジオなんとか)で収めると便利っぽいけど、分かりやすい解説がなかった。しかも欲しい計算はできないらしいので、他を探していたらグーグルの本国サイトにたどりついて、ぴったりの解説を見つけた。普通に、floatの10,6で入れて、計算に使えた。
他にもいろいろ見てみたけど、グーグルのサイトってかなり使える。コードの書き方も参考になった。