Home > Tags > 文字コード

文字コード

さくら共用サーバでsymfonyの「encoding:utf8」は使えない?

symfonyのdatabases.ymlで文字コードを

encoding:utf8

のように設定すると思うのですが、
これをしたままアプリを作成するとエラー。

 
どうやらさくらはEUC-JPがデフォルトっぽいので、
上記encodingの部分をコメントアウトしたらいけました。

 
ちなみにMySQLの文字コードを調べるには

show variables like ‘char%’;

で見れました。

CentOS5の文字コードをUTF-8に設定

どこかにCentOSの文字コードは
デフォルトでUTF-8だと書いてあった気がしたのですが、
vimを使うといつも文字化けしていました。

そこで調べるために以下のコマンド。

printenv | grep LANG

結果は

LANG=”C”

 
・・・ということでちゃんと設定(苦笑)
以下のサイトを参考にさせていただきました。

CentOSの文字コードを変更
http://www.ivystar.jp/archives/59
(アイビースター)

mb_substrと文字コード

mb_substrを使って日本語を取り出すときに
文字コードの罠がありました。

なお、PHPの文字コードはEUCです。

 
はじめは

$hoge = mb_substr($get_db_data, 0, 1);

と書いていましたが、
どうやらmb_substrの第4引数に文字コード指定ができるようです。

$hoge = mb_substr($get_db_data, 0, 1, ‘EUC-JP’);

 
これでやっと入力チェックが引っかかってくれそうです。。。
(入力チェックの書き方が悪いのですが、影響範囲が広かった。。。)

mysql_escape_stringの罠

仕事でずいぶん前に作られたPHPをいじっていました。

DBの型も、PHPの入力チェックも通っているのに
なぜかSQLエラーが出ていたので調べてみました。

 
諸悪の根源はPHPファイルがSJISだったことであるようです。

エラーを出している部分は以下の部分でした。

$hoge = mysql_escape_string($hoge);

こうするとPHPファイル自体がSJISの場合、
$hogeに¥(円マーク)が入ってしまうケースがあり、
SQLエラーが起こっていました。

 
そこで以下に変更しました。

mysql_set_charset(’sjis’);
$hoge = mysql_real_escape_string($hoge);

mysql_real_escape_stringは
mysql_set_charsetの文字コードを見て$hogeを変換してくれるそうです。

 
ちゃんとした作りにしようと強く実感しました(苦笑)
 

PHP4でRSSを取ってくる

$xml_parse = XML_unserialize($xml_data);

前回、PHP4でXMLをパースする方法を書きましたが、
そもそもウェブ上にあるRSSを取り込みたいとき、
そのXMLファイル(ここでいう$xml_data)はどう取ってくるんだよ、
というところに私はつまづきました。

 
PHPの関数であるfile_get_contentsをして解決しました。

file_get_contents(’http://feeds.feedburner.jp/cafe-system’);

 
なお、文字コードで悩んだ場合は、

$xml = mb_convert_encoding(file_get_contents($HOST), ‘UTF-8′, ‘auto’);

で解決しました。
 

Home > Tags > 文字コード

Archives
Tag Cloud
Feeds

Return to page top