質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ethna

Ethnaは、似たようなコードを書かなくて いいことを目標に作成された PHPWebアプリケーションフレームワークです。

Q&A

解決済

2回答

1221閲覧

PHPのセッション保持時の文字コードについて

nata-de-Gollira

総合スコア42

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Ethna

Ethnaは、似たようなコードを書かなくて いいことを目標に作成された PHPWebアプリケーションフレームワークです。

0グッド

1クリップ

投稿2021/01/06 07:54

編集2021/01/06 09:01

PHP5.1のシステムをPHP5.3へバージョンアップして検証しています。
フレームワークにEthna 2.3.7を使用しており、可能な限りのバージョンアップという事でPHP5.3を採用しております。

既存ソースで、セッションの情報をUTF-8からEUC-JPへ変更している箇所があるのですが、
文字化けします。

$hoge = $this->session->get('hoge'); mb_convert_encoding($hoge , 'EUC-JP' , 'UTF-8');

逆にこの文字コード変換をしない場合は、正しく表示されます。
(つまり、セッションの情報が既にEUC-JP?)

他の画面表示などは、上手く表示されている事から、一度セッションに格納した情報を取り扱う時のみ文字化けを起こしているようです。

PHP(もしくはapache?)のセッションでの文字コードの指定する箇所等あるのでしょうか?

特に設定も変えておらず、PHP.iniも5.1時 設定を引き継いだつもりではあるため、
PHP5.1→5.3のバージョンアップ時に、このあたりの仕様変更等があったのでしょうか?

前任者もいないため、なるべく、ソース修正を避けたいと考えているため、
設定等で見直すべく箇所等あれば、助言のほどお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2021/01/06 08:00

そもそもPHP5.3はとうの昔にサポートが終わってしまったバージョンですが、 どうしても5.3でなければならない理由はあるのでしょうか。 仕様変更の確認ならネット上(PHPマニュアルとか)から拾えなくもないですが、 さすがにPHP5.3特化の話となると、アドバイスは得られずらいかと思います。
nata-de-Gollira

2021/01/06 08:56

フレームワークについて記載が漏れておりました。 Ethnaを使用しておりEthnaのバージョン的にPHP5.3を使用する必要がありました。 5.3特化という訳ではなく、 そもそもPHPでセッションも文字コードの指定できる箇所等があるのか、 5.1以降でセッションの文字コードが変わったのか? の情報が自分で発掘できませんでしたので、有識者がいらっしゃればアドバイスをと思い質問させていただきました。
退会済みユーザー

退会済みユーザー

2021/01/06 10:46

php.iniのmbstringまわりを点検してみるとか。detect_orderとかhttp_inputとか。
m.ts10806

2021/01/06 11:08

そもそもすでに更新止まってるフレームワークのようですし、独自に作り込まれた部分が不明な状態では厳しいのではないでしょうか。 今更PHP5.3の環境作ってみようという人もいないでしょうし…
guest

回答2

0

ベストアンサー

特に設定も変えておらず、PHP.iniも5.1時 設定を引き継いだつもりではあるため、
PHP5.1→5.3のバージョンアップ時に、このあたりの仕様変更等があったのでしょうか?

どの様にして設定の引継ぎを行ったか詳しく質問に追記して下さい。

また、アップデート前後でphpinfo()を表示させて比較し、文字コード周りの設定で差異が無いかの確認を行ってください。(Ethnaの該当する処理の直前にphpinfo()を入れるとかしないと確認しきれないかも?)
前後で比較して検証できない場合は・・・ソースの修正を検討に入れるしかないかなと。

また、各設定等については
PHP 5.1.x から PHP 5.2.x への移行
PHP 5.2.x から PHP 5.3.x への移行
を確認してください。

以下うろ覚えによる予想

もう10年以上前に更新が停止されているフレームワークなのでうろ覚えなのですが、

Ethnaのデフォルト文字コードはEUC-JP(だったはず、非公式にUTF-8版もあったような)なので、内部的には一旦すべてEUC-JPに置き換わっているのが正しいんじゃないかなと思います。

で、データをSmartyで表示する時に文字コードを変更して表示しているはず。

ですので、

逆にこの文字コード変換をしない場合は、正しく表示されます。
(つまり、セッションの情報が既にEUC-JP?)

この認識はEthnaの挙動的には正しくて、本来は

$hoge = $this->session->get('hoge'); mb_convert_encoding($hoge , 'EUC-JP' , 'UTF-8');

このコードは要らないはずなんですよね。(このコードがフレームワーク内部では無く、開発時に追加したコードなのであればですが)

考えられるのは、
バージョンアップ前の状態で、文字コード設定が変なことになっていて、何らかの理由でUTF-8でセッションに情報が格納されていて、
場当たり的、局所的に文字コード変換しているんじゃないかなと
で、文字コード周りの設定が完全には引き継がれなかったことで要らないコードが悪さをし始めたんじゃないかなと予想します。

そのため、文字コード周りの設定を完全に移行するか、コードを取り除くかで対応が出来るんじゃないかなと予想します。

投稿2021/01/06 10:51

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nata-de-Gollira

2021/01/07 02:17

ありがとうございます。こういった「うる覚え」でも良いので、経験者の知見が欲しかったので助かりました。そもそも既存ソースでUTF-8だったのが変だったぽいですね。今回で正しい挙動になったと割り切って、mb_convert_encodingを片っ端から除去していきます。
guest

0

session->getというアクセス方法ですからなんらかのライブラリで
処理しているのではないでしょうか?
ライブラリ側が文字コードのブレを調整しているなら無手順で
変換されるかもしれません

投稿2021/01/06 08:28

yambejp

総合スコア114810

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nata-de-Gollira

2021/01/06 09:00

フレームワークについて記載が漏れておりました。 Ethna 2.3.7を使用しております。
yambejp

2021/01/06 09:03

var_dump($_SESSION) などで生データを確認すればよいかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問