skillup

技術ブログ

PHP

ロケール情報について

投稿日:

本日、csvファイルを読み込む処理を行っていたんですが、コンソールからコマンドを打つと化けずに、ウェブ上で見ると化けるという現象が発生。

csv,プログラムともに文字コードがutf8で統一していることは確認しています。

いろいろ調べたところapacheの起動時にロケール情報がおそらく不正確ということでプログラムの冒頭に上記の設定をいれたら解決しました。

以前にもやった処理でしたが、理解を深くしていなかったため、これを機に調査。

ロケール情報とは?

OSが持っている多言語対応の仕組みのようです。OSが提供していますので、環境により若干変わりこれがコンソールから打った時とapacheで動かしたときの文字化けの有無かと思います。

PHPは文字列の扱いなどが統一されておらず各関数ごとに規格がバラバラのようです。

  • 文字エンコーディングを仮定せず、文字列をバイト列とバイトオフセットで扱う関数(substr, strposなど)
  • 内部エンコーディングに従うか、または引数で文字エンコーディングを指定する関数(htmlentities, mbstring関数全般)
  • ロケール設定に従う関数(本稿の話題、strcasecmpなど)
  • UTF-8など特定の文字エンコーディングを前提とする関数(u修飾子利用時のPCRE関数など)

上記のようにバラバラなため、内部の文字エンコーディングを統一しても化けることがあります。fgetcsvはロケール依存のようです。

そのため、このロケールを統一してあげないと化けることになります。※今回は発生しませんでしたが、ロケールにja_JP.UTF-8がないこともあるようです。

その場合、追加をすることになります。※リンク参照

参考リンク

PHPロケールに関するまとめ

公式 setlocale

PHPのfgetcsv()がsetlocaleしてもダメな時にやるべきたった一つの事

-PHP
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

cake sql系+リレーション+ヘルパー

先月末に引き続いてcakeネタをもりっといきます。 といっても自分用の小ネタリンク集です。 Contents1 sql系の小ネタ1.1 findとread1.2 find(‘count&# …

no image

PHPでの空白削除に関して

PHPで空白を削除する方法についてメモします。 trimについて 空白を削除する関数といえばtrimが何といっても一番有名でしょう。

no image

cakePHP CSVのインポートとエクスポート

本日もcakeネタです。 CSVインポート&エクスポート CSVのインポートとエクスポートについて。 かなりいろいろなプラグインがあるようですが、一番楽なのはbehaviorを使う手法のようです。 a …

no image

APIに関して

RESTAPIのルーティングで気をつけることなんぞを。 直近のプロジェクトではRESTAPIを作ることが多かったんですが気をつけることなんぞを。 Contents1 仕様書はソースから2 ツール3 命 …

no image

LaravelでのAPI実装

Laravelで外部からAPI叩いてデータ入力みたいなことをしたかったのでこれを機に勉強。認証とかを通してないのでそのまま公開すると危険です・・(汗) 参考リンク [PHP] Laravel5.6で、 …