tsubolabo
@tsubolabo (tsubolabo)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

PHPのバージョンアップで文字化け

Q&A

Closed

niftyのLaCoocanのサーバーに、8年以上昔のPHP5.2の時代に作ったサイトを置いています。その後、メンテナンスも要らずにそこそこに運用できていたため、もうPHPの文法も忘れてしまっています。

その状況下で、来月から、PHP5.2をPHP7.1に強制的に切り替えるとの通達を受けました。今月までなら、PHP5.2, PHP5.6, PHP7.1 が自由に使用できるそうです。

そこで事前確認のため、PHP5.6やPHP7.1に切り替えて閲覧してみたところ、WarningやNoticeが山のように表示され途方に暮れてしまいました。しかし、Qiitaの各種投稿を参考にさせていただき、何とか警告は出ないところにまでは漕ぎ付けたものの、MySQLから読み出した日本語のデータを表示させる部分で文字化けするようになってしまい、苦戦しています

例えば、PHP5.2では、
「PHP ver.5 → ver.5.6 への移行テストです。」
と表示されていたものが
「PHP ver.5 → ver.5.6 への移行テストです。」
のようになってしまいます。

心当たりといえば、MySQL関係のPHPコマンド(mysql_connect, mysql_select_db, mysql_query, mysql_close, mysql_fetch_array, MYSQL_ASSOC)のmysql_, MYSQL_ 部分を mysqli_, MYSQLI_ に変更したことです。

これらのコマンドの変更にあたって、何らかの必要な配慮が抜けているのか?とも思っています。

解決のための御助言を頂ければ幸です

追伸:
PHP5.2の時代にも、ブラウザ上では正常に表示されていたデータも、phpMyAdminで見ると文字化けしたものしか表示されていませんでした。

0

1Answer

自己レスです。

Qiitaの投稿記事
「怪現象?PHP7にしたらDB文字化け」
https://qiita.com/k_iwamoto/items/a7a3c39e582930f1a9d4
に紹介されているように、
mysqli_set_charset($conn,"latin1");
を追加したところ正常に表示されるようになりました。

latin1の部分を、utf8, utf8mb4, utf16, utf16le, utf36 と変えても文字化けは治りませんでした。ujis, sjis, eucjpms, cp932にいたっては、文字が全く表示されません。
まさか、latin1で治るとは思ってもいませんでした。

k_iwamoto様、どうもありがとうございました。

0Like

Your answer might help someone💌