Posts Tagged ‘UTF-8’

UTF-8 で半角・全角を数えるには一度 Shift-JIS に変換から行う

UTF-8 でマルチバイト文字は3バイトとして数えられます。PHP の strlen で数える場合に、英数字なら1バイトですが、日本語などのマルチバイト文字だと3バイトが帰ってきて、半角・全角の計算が難しくなります。

対処方法としまして、最近思いついたんですが、一度文字列を Shift-JIS に変換してから文字数の計算を行います。

1
strlen(mb_convert_encoding($bar, "sjis"));

こうすることで、マルチバイト文字は2バイト、半角英数字なら1バイトで取得できるようになり、半角・全角の計算を行えます。半角・全角なんて久しぶりに聞きましたが、拘る人は拘るようなので、ひとつ覚えておきたいところですね。

[PHP] strlen 関数で日本語の長さを取得する際に文字コードが UTF-8 の場合1文字3バイトになる

そういえば最近気付いたんですが、PHP の strlen 関数で日本語の長さを取得する際、文字コードが UTF-8 の場合1文字3バイトになるんですね。でも確実に3バイトになるってわけでもなくて、マルチバイトって面倒くさいですね。

で解決策がここで検討されてました。
日本語文字列のバイト数取得にstrlenだけではダメな理由-PHP – CPA-LABテクニカル

まだ読んでないですけど…。今のところ私は1文字3バイトという設定で、マルチバイト文字が含まれている場合だけ文字上限を3倍にしちゃったり適当なことしちゃってます。でもこうすると「あ」って書いたあと半角英数字で3倍の文字かけるようになってしまいますね。でもそういう人は攻撃しかけようとしてる人だと思うからいいや。

XREA で cron ジョブを設定してシェルスクリプトを書いて PHP を起動させてメールを送信

cron とかシェルスクリプトとかよく分からなくて、ちゃんと設定してもなかなか文字化けでうまく動作せず、10日間くらい悪戦苦闘しながら100を超える Web ページを読みあさり、それを参考に次のような設定にしたところ解決できたのでメモしておきます。これから同じことをしようとする人の参考になれば幸いです。 Read more…

MySQLでUTF-8で文字化けする場合の回避策(レンタルサーバ編)

偉そうなタイトルを付けてますが、MySQL初心者が文字化けに遭遇した際にどのように対処したかーということを書いています。

レンタルサーバではmy.confを弄ることができないので、ローカルサーバの様に簡単にUTF-8に設定することができません。なので、毎回PHPでMySQLに接続するときにいちいちSET NAMES utf8;を実行する方法で解決しました。

1
2
$db=mysql_connect("db_name","db_id","db_pass");
mysql_query("SET NAMES utf8",$db);

以下のページを参考にしました。
MySQLの文字コード自動変換 – XREA&CORE SUPPORT BOARD
さぼてん: PHP+MySQL+UTF-8で文字化け対策

MySQLでUTF-8に設定する方法

最近はutf-8が標準のような感じになってきてるし、PHPも何かとutf-8の方が後々融通がきくからutf-8にして置く必要がありそうです。ということで、今回はMySQLで文字コードをUTF-8に設定するのにかなり苦戦したけど、実はまたまた初歩的なミスをしていたのでメモしておきます。

デフォルトの文字コードを変更・設定する

他のサイトでは様々な方法が紹介されていますが、私の場合は以下のように設定することでutf-8に設定することができました。ちなみに現在の自分の文字コードはコマンドプロントで「status」と打つことで確認できます。

1.[mysqld]に以下のコードを追加する

my.confの中にある[mysqld]の行を探して、その下に以下のようにコードを追加します。

1
2
3
4
[mysqld]
?
default-character-set=utf8
character-set-server=utf8

ちなみに、下の方へずらずらと[mysqld]は続きます。その中に今回追加するコードが既に入っていて、尚且つそれに「sjis」なんて書いてある場合は、意味がないので注意しましょう。

2.[client]に以下のコードを追加する

1
2
3
[client]
<省略>
default-character-set=utf8

3.[mysql]に以下のコードを追加する

1
2
3
[mysql]
<省略>
default-character-set=utf8

4.[mysqldump]に以下のコードを追加する

1
2
3
[mysqldump]
<省略>
default-character-set=utf8

以下のサイトを参考にさせていただきました。

MySQLの文字コードをUTF8に設定したい – Knowledge Database IT

mysql-5.0.20を使いたいのですが、文字化けで困っております。日本語の文字が?になってしまいます。 WIN2000+AN HTTP+mysql+perl5.8で使いたいと思っております。 文字化け.. – 人力検索はてな
PHP+MySQL+UTF-8で文字化け回避:トラブルシューティング【ID-Blogger – Infinity Dimensions】