PHPのマルチバイト関数で文字化けが色々やっても直らなかったのに、今日は直っていた件

  • 2013/05/19

XAMPPでPHP

先日、マルチバイト関数を使って文字化けしたので色々対処してみたけど結局直らなかった。でも、今日実行してみたら、何も変更してないのに直っていた件。

PR

この本の65ページを見ながらマルチバイト関数を使って日本語を処理しようとしましたが、文字化けして上手くいきません。特に難しいことをしていたわけではなくて、mb_substr()関数を使って、指定した文字列の指定した場所から表示するというもの。

書籍にも対処法が載っていたので、その通りphp.iniを確認。マルチバイト関数は使用できるようになっていたけど、文字コードがコメントアウトしてあったので、セミコロンを消してUTF-8に変更。Apacheを再起動して、これで直るかと思ったけど直らない。

<?php
echo strpos("abc@nishi2002.com", "@");	//指定した文字が見つかった位置
echo "&lt;br&gt;";
echo substr("abc@nishi2002.com", 4,5);	//指定した場所(4)から、指定した文字数(5)
echo "&lt;br&gt;";
echo strlen("abc@nishi2002.com");
echo "&lt;br&gt;";
echo strcmp("abc@nishi2002.com", "abc@nishi2002.com");
echo "&lt;br&gt;";

$a = "千葉県我孫子市";
$b = mb_strpos($a,"県");
echo mb_strpos($a,"県");
echo "&lt;br&gt;";
echo mb_substr($a, $b+1,4,"UTF-8");
?&gt;

引数で文字コードを指定することもできるので、やってみたけど直らない。

mb_language("Japanese");
mb_internal_encoding("UTF-8");

これをやってみても直らないから、きっとローカル環境のせいか?と思い、レンタルサーバにアップロードしてみたけどダメ。検索して.htaccessで設定しても直らない。

php_value mbstring.func_overload 0
php_value mbstring.language "Japanese"
php_value mbstring.http_input pass
php_value mbstring.http_output pass
php_value mbstring.encoding_translation off
php_value mbstring.internal_encoding "UTF-8"
php_value magic_quotes_gpc Off
php_value register_globals Off
php_value session.auto_start Off

諦めて先に進んでましたが、ブログを書こうと思って改めて表示してみたら文字化けが直ってる。

mb_substr()関数

最初は、64bitのWindows8に32bitのXAMPPをインストールしているからかな?と思ったけど、レンタルサーバでも文字化けというのはおかしい。Apacheの再起動ではなくて、XAMPPを再起動しないといけなかったのか?と一瞬思ったけど、それだってレンタルサーバでは文字化けせずに表示されるはず!

と書いたところで、ハッと気づく。そもそもレンタルサーバでも設定しだいでは文字化けするだろうから、この設定って正確なのか・・・?ということで、もう一度アップロードして確認してみたら、文字化けせずに表示された。

夜中にやってたので寝ぼけてた?でも、職場で試した時も文字化けしたんだよな。仕事しながら寝ぼけてた?(爆)

もうワケわからん!
結果オーライ

 

2013/05/20追記

また、ハッと気づいた!そういえば、最初はChromeでやってなかったか?昨日確認したのはFirefoxだったよな。。。と思って、再度Chromeで確認。やっぱり文字化けするけど、Firefoxで確認すると文字化けしない。

そういうことだったんですね!書籍に書いてある通りPHPの部分だけ入力して確認してました。当然、出力されるのはテキストのみ。HTMLのタグを追加してみたらChromeでも文字化けせずに表示されました。手を抜いたらあきませんということです(爆)

関連記事