0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

PHPで末尾の「ー(伸ばし棒)」が文字化けした話

Posted at

はじめに

このページをご覧ということは、PHPの文字化けにハマってる方かもしれません。
私もハマりましたので、解決策をメモしておきます。
PHPは色んな原因で文字化けするみたいで、調べるだけでも一苦労ですよね。

さて先日、お客様先に、作ったアプリを納品しました。
私は現地に行かず、別の人間が現地に行き、アプリをリリースしてもらいました。

LAMP環境構築にあたり、
インターネットで外に出られない環境だったりで、すったもんだあったそうですが、
大きな問題はなく、無事に作業を終えたようです。

で、その時に聞いた環境が以下の通りでした。

環境

・RedHutLinux Enterprise 7.7
・Apache2.4.6
・PHP 5.7
・MariaDB 5.6

お客様から連絡! 「文字化けしますね」

そんでもってある日、メールを開くと、
「先日のアプリですが、一部文字化けが発生します」とのこと!

状況を聞くと、
DBから値を取得して、テキストボックスに表示する値が、
「ユーザー」などの末尾の伸ばし棒が文字化けするとのこと。

でも、検証環境では一向に再現しないので、どうしたもんかなーと思ってました。
(そもそも検証環境はRedHutLinuxはなく、CentOSやubuntuしかないので、完全な再現が不可だったんですね)

調査

「php 文字化け 原因」などで検索しても、それっぽい情報は一切出ない。。

頑張って実機を動かして調査を進めると、
どうやら、mb_ereg_replace関数を使用している部分が怪しそう。

Google先生に聞いてみると、mb_ereg_replace関数使用での文字化けが発生することがあることがわかりました!
・参考URL
http://fanblogs.jp/itblogger/archive/14/0

なるほど、つまり、文字コードの設定が原因で文字化けが発生することがあるそう。

作ったアプリはUTF-8で動くことを想定していました。
試しに、mb_ereg_replace関数を使用する直前で以下の記述を追加。

mb_regex_encoding( "EUC-JP" );

すると。




文字化けが発生しました!
事象の再現ができました!
スクリーンショット 2020-04-20 17.20.47.png
こんな感じで文字化けします。
皆さんも、文字化けの内容が同一なら、これが原因かもしれません。

文字化けの原因と対策

つまり、現地で設定したPHPは、EUC-JPがデフォルトの文字コードであることが考えられます。
こちらの検証環境では、UTF-8がデフォルトの文字コードです。

ということで、どうやって現場でのPHPのデフォルト文字コードをUTF-8にしようかと調べたところ。
php.iniで設定ができるみたいですね。

お客様にご連絡して、現場サーバのphp.iniに、以下の2行を追加してもらいました。

default_charset = "UTF-8"
mbstring.internal_encoding = UTF-8

apacheを再起動して、現場でも文字化けがなくなったとのこと。
めでたしめでたし!!

ただ、以下のサイトを確認すると、このように記載がありました。
mb_regex_encodingのマニュアル
「5.6.0   デフォルトのエンコーディングが EUC-JP から UTF-8 に変わりました。」

現場、PHP5.7て聞いたんですけどね??
そんなこともあるのかー、と思った春の出来事でした。

セキュリティ的にphp5.7でいいのか?とも思ってるんですが、向こうが用意した環境なので、目を瞑ることにしました。。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?